Christian Schwarz
b1a3a57623
cmd close RPC with timeout
2017-05-14 14:11:19 +02:00
Christian Schwarz
48a4e8033a
rpc: close outgoing SSH connection on exit.
2017-05-14 14:11:19 +02:00
Christian Schwarz
04206ebd8b
util.IOCommand: Close() gracefully via SIGTERM
2017-05-14 14:11:19 +02:00
Christian Schwarz
ee570bb060
refactor: consolidate ForkReader-like implementations to IOCommand
2017-05-14 12:27:15 +02:00
Christian Schwarz
ee8b0d3781
cmd: dup2(logfile, stderr) if logfile set
2017-05-13 15:35:19 +02:00
Christian Schwarz
6f84bf665d
cmd: support logging reads & writes from sshbytestream to a file.
2017-05-13 15:34:28 +02:00
Christian Schwarz
74719ad846
rpc: chunk JSON parts of communication + refactoring
...
JSONDecoder was buffering more of connection data than just the JSON.
=> Unchunker didn't bother and just started unchunking.
While chaining JSONDecoder.Buffered() and the connection using
ChainedReader works, it's still not a clean architecture.
=> Every JSON message is now wrapped in a chunked stream
(chunked and unchunked)
=> no special-cases
=> Keep ChainedReader, might be useful later on...
2017-05-13 15:33:46 +02:00
Christian Schwarz
feabf1abcd
rpc: logging for bytestream listener
2017-05-13 15:25:09 +02:00
Christian Schwarz
53b3a940ec
WIP: main: tree traversal
2017-05-13 15:25:09 +02:00
Christian Schwarz
5bc6d460cf
WIP: sink & pull implementation
2017-05-13 15:25:09 +02:00
Christian Schwarz
b2de658270
util: fix package name of chunking
2017-05-13 15:25:09 +02:00
Christian Schwarz
6524cfce0c
create file if it doesn't exist
2017-05-13 15:25:09 +02:00
Christian Schwarz
dd6dd60e98
Simplify "fork then io.Reader" abstractions
2017-05-13 15:23:37 +02:00
Christian Schwarz
54778c0374
zfs: remove erronous output from ForkReader
2017-05-13 15:23:28 +02:00
Christian Schwarz
c762502f6e
zfs: implement DatasetPath top down walk
2017-05-13 15:23:28 +02:00
Christian Schwarz
2407556f15
main: implement request handler.
2017-05-07 12:28:03 +02:00
Christian Schwarz
996be3704d
zfs: implement ZFSListFilesystemExists()
2017-05-07 12:26:41 +02:00
Christian Schwarz
6a420e872e
zfs: implement ZFSSet
2017-05-07 12:23:12 +02:00
Christian Schwarz
d37bdc3d7a
zfs: implement ZFSRecv
2017-05-07 12:22:57 +02:00
Christian Schwarz
030bd7affe
zfs: implement ZFSSend
2017-05-07 12:20:56 +02:00
Christian Schwarz
1a92717894
zfs: FilesytemDiff: len(IncrementalPath) < 2 means same most recent version
...
bonus: style + typo fixes
2017-05-07 12:20:56 +02:00
Christian Schwarz
d0c0e2510b
zfs: FilesystemDiff: support empty left list = no common ancestor
2017-05-07 12:20:56 +02:00
Christian Schwarz
cd8796aed4
rpc: Initial|IncrementalTransferRequest transfer zfs data structures
2017-05-07 12:20:56 +02:00
Christian Schwarz
fa97d3d98a
config: parse InitialReplPolicy with default to most_recent
2017-05-07 12:00:34 +02:00
Christian Schwarz
c71be910f9
rpc: fix incremental transfer request handling
2017-05-07 11:53:47 +02:00
Christian Schwarz
44d20ac256
zfs: ZFSListMapping fix broken logic
2017-05-06 23:45:33 +02:00
Christian Schwarz
cb37470010
sshbytestream: exited command always returns io.EOF
2017-05-06 23:44:59 +02:00
Christian Schwarz
82beea94d5
rpc: missing response header for InitialTransferRequest
2017-05-06 23:43:55 +02:00
Christian Schwarz
61c263b91d
chunking: rewrite to handle EOF events correctly
...
bonus: some tests asserting the chunking protocol is adhered to
2017-05-06 23:41:51 +02:00
Christian Schwarz
9b871fb7c0
rpc: more detailed errors
2017-05-06 10:58:23 +02:00
Christian Schwarz
aa696dd0ce
zfs: use createtxg and guid properties for FilesystemVersion
2017-05-06 10:58:01 +02:00
Christian Schwarz
22454738af
application-wide logging through Logger interface
2017-05-03 18:32:11 +02:00
Christian Schwarz
1e7b29bdc5
license: change attribution
2017-05-03 18:28:04 +02:00
Christian Schwarz
55463e5f26
jobrun: per-job logger
2017-05-03 18:28:04 +02:00
Christian Schwarz
3b6d79ec67
jobrun: log through abstract logger interface instead of stderr
2017-05-03 18:27:55 +02:00
Christian Schwarz
77f749112c
main: remove global handler and unused structs
2017-05-03 18:27:23 +02:00
Christian Schwarz
f005ce318d
Purge model package, not really used anyways.
2017-05-03 17:26:45 +02:00
Christian Schwarz
514f9aa123
rpc: hex-ints for RequestType definitions
2017-05-03 17:13:08 +02:00
Christian Schwarz
b8e7ddd61f
rpc fixup msising directions filesystemrequest
2017-05-03 17:12:31 +02:00
Christian Schwarz
43f67d2b7c
rpc: add FilesystemVersionsRequest
2017-05-03 17:12:15 +02:00
Christian Schwarz
f46fb2f34f
zfs: filesystem versioning and diffing
2017-05-01 20:35:49 +02:00
Christian Schwarz
644d3dd06b
zfs: public ZFSList() function + consolidation of mapping code
2017-05-01 20:35:04 +02:00
Christian Schwarz
28f0b90c25
zfs: check for forbidden dataset path characters
2017-05-01 20:09:35 +02:00
Christian Schwarz
301be177ea
config: fix broken parsing of direct mapping
...
Would only parse wildcard ('|') DirectMapping but no specific direct
mappings.
2017-05-01 20:08:20 +02:00
Christian Schwarz
b87829817a
rpc: bytestream: listen: filesystems request: reply with header
2017-04-30 23:47:12 +02:00
Christian Schwarz
8bdcdd5ec6
rpc: bytestream: listen: consistent error handling
2017-04-30 23:47:12 +02:00
Christian Schwarz
ec4284f80c
sshbytestream: fix semantics when ssh connection dies
...
in the Wait()ing goroutine, we create an instance of our own error
containing WaitErr + stderr excerpt. Only if the remote command exits
non-zero.
io.EOF is the error we get as soon as the other end of the pipe
(the ssh command) has died.
=> wait for it in the ReadWriter methods.
2017-04-30 23:47:12 +02:00
Christian Schwarz
226935ddea
jobrun: error handling through notification channel
2017-04-30 23:47:12 +02:00
Christian Schwarz
9fdd1ea909
rpc: fix panic when parsing filesystem response
2017-04-30 23:47:12 +02:00
Christian Schwarz
08370689c8
rpc: implement respondWithError
2017-04-30 23:47:11 +02:00