Version 2.0.4 * mk6gather: append option no longer experimental Version 2.0.3 * Post DiFX-2.6 * add env var MARK6_META_ROOT for entirely module-free playback * api: add getMark6Metapath(), mark6_sg_get/set_metapath() * getMark6GathererFileSize() : now returns the file size as it will be gathered rather than the collective sizes of the Mark6 scattered files. - new function getMark6GathererSourceFileSize() allows previous behavior. * mark6Gather() : fix bug which sometimes caused one or more blocks from end of a gather to be ignored. - with this fix, and with the above getMark6GathererFileSize() change, the resultant file sizes should be in accord. * mark6Gather() : seeks bigger than NDISK*2^31 were broken. Now seem fixed. * mark6Gather() : operations on Mark6 files that are smaller than a block size seem to work now. * mk6gather: fail if output file cannot be created * mk6gather: all output goes to stderr to protect piping operation * Version for DiFX-2.8, Nov 4, 2022 Version 2.0.2 * Post DiFX-2.6 * mk6gather: add command line arguments for output and verbosity * mk6gather: add command line argument for max bytes to copy * add "mk6cp" script that uses "cp"-like syntax * mk6gather: add "append" (still experimental) and "skip" options * mark6gather seeking: fix for seek near start of file * mk6ls: add ability to match patterns (like ls does) * mk6ls: add faster option to get file size (--bytes or -b) Version 2.0.1 * add "mark6gather" functions (were in vdifio). These have partially overlapping functionality w/ the mark6sg functions. * Version for DiFX-2.6, Mar 4, 2019 Version 2.0.0 * libmark6sg: added creat(), write(), recvfile() * fuseMk6: added wrapping calls to creat() and write() for module write suppor Version 1.2.0 * libmark6sg: added automatic caching of scatter-gather block list metadata (/tmp/mark6_fuse_autocache_) at the first access to a scan its cache is built and it is re-used during any later accesses * Version for DiFX-2.5, May 16, 2017 Version 1.1.9 * fuseMk6, mk6copy, m6sg_gather: use MARK6_ROOT env var if available Version 1.1.8 * libmark6sg: simplified the prefetch method, average throughput now slightly better and a lot more consistent * fuseMk6: refresh the scanlist when recordings change Version 1.1.7 * fuseMk6 (now v1.11): fixed FUSE open() return value, error code instead of file descriptor, now multiple files can be opened at the same time * fuseMk6: added initial estimate of scan size in bytes using file fragment sizes minus guessed headers * fuseMk6: file user and group ID now match account that started fuseMk6 * libmark6sg: handle fragments where last block is only partially written out * libmark6sg: protect file open/close internals via mutex * libmark6sg: tidied up slightly the prefetch code Version 1.1.6 * mark6sg/*.h: allow inclusion from C++ files Version 1.1.5 * libmark6sg: new mark6_sg_set_rootpattern() API function * fuseMk6 (v1.10): new command line option '-r ', * for example -r /mnt/disks/[1-4]/[0-7]/data/ * support out-of-tree builds (TODO: use static linking to libjsmn) Version 1.1.0 * libmark6sg: new mark6_sg_stripesize() API function * libmark6sg: blocklist extraction with one thread per file for major speedup * libmark6sg: read functionality reimplemented via mmap() * libmark6sg: added background threads that touch upcoming mmap()'ed pages, causing kernel to prefetch the pages in parallel from all files and giving factor ~10 higher throughput (now ~1 GB/s) * fuseMk6: new command line option -v * mk6copy: simple copying utility like 'm6sg_gather' but with timing reports Version 1.0.0 * Support the Mark6 Scatter-Gather formats v1 and v2