VictoriaMetrics/lib
Aliaksandr Valialkin 43b24164ef
all: add Windows build for VictoriaMetrics
This commit changes background merge algorithm, so it becomes compatible with Windows file semantics.

The previous algorithm for background merge:

1. Merge source parts into a destination part inside tmp directory.
2. Create a file in txn directory with instructions on how to atomically
   swap source parts with the destination part.
3. Perform instructions from the file.
4. Delete the file with instructions.

This algorithm guarantees that either source parts or destination part
is visible in the partition after unclean shutdown at any step above,
since the remaining files with instructions is replayed on the next restart,
after that the remaining contents of the tmp directory is deleted.

Unfortunately this algorithm doesn't work under Windows because
it disallows removing and moving files, which are in use.

So the new algorithm for background merge has been implemented:

1. Merge source parts into a destination part inside the partition directory itself.
   E.g. now the partition directory may contain both complete and incomplete parts.
2. Atomically update the parts.json file with the new list of parts after the merge,
   e.g. remove the source parts from the list and add the destination part to the list
   before storing it to parts.json file.
3. Remove the source parts from disk when they are no longer used.

This algorithm guarantees that either source parts or destination part
is visible in the partition after unclean shutdown at any step above,
since incomplete partitions from step 1 or old source parts from step 3 are removed
on the next startup by inspecting parts.json file.

This algorithm should work under Windows, since it doesn't remove or move files in use.
This algorithm has also the following benefits:

- It should work better for NFS.
- It fits object storage semantics.

The new algorithm changes data storage format, so it is impossible to downgrade
to the previous versions of VictoriaMetrics after upgrading to this algorithm.

Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3236
Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3821
Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/70
2023-03-19 01:36:51 -07:00
..
appmetrics all: add ability to push internal metrics to remote storage system specified via -pushmetrics.url 2022-07-21 20:36:27 +03:00
auth app/vminsert: allows parsing tenant id from labels (#3009) 2022-09-30 18:35:53 +03:00
awsapi .golangci.yml: properly enable revive linter and fix all the warnings it detects 2023-02-26 12:18:59 -08:00
backup app,lib: fix typos in comments (#3804) 2023-02-13 13:27:13 +01:00
blockcache all: remove explicit "xxhash" name when importing github.com/cespare/xxhash/v2 package 2022-06-21 20:23:32 +03:00
bloomfilter lib/promscrape: add the ability to limit the number of unique series per each scrape target 2021-09-01 16:03:59 +03:00
buildinfo all: open-sourcing single-node version 2019-05-23 00:18:06 +03:00
bytesutil lib/bytesutil: add -internStringDisableCache and -internStringCacheExpireDuration command-line flags 2023-02-27 14:16:49 -08:00
cgroup all: use os.{Read|Write}File instead of ioutil.{Read|Write}File 2022-08-21 23:52:35 +03:00
decimal lib/decimal: use consistent randomizer in tests 2023-01-23 19:23:39 -08:00
encoding lib/encoding: make deterministic tests which rely on math/rand 2023-01-23 18:41:09 -08:00
envflag lib/envflag: small refactoring after 518c340ae3 and 02096e06d0 2022-10-29 02:28:58 +03:00
envtemplate lib/envtemplate: allow non-env var names inside "%{ ... }" 2022-11-07 13:58:27 +02:00
fastnum Makefile: add build and test rules with enabled race detector. These rules have -race suffix 2020-03-05 12:03:38 +02:00
fasttime lib: extract common code for returning fast unix timestamp into lib/fasttime 2020-05-14 23:02:07 +03:00
filestream lib/filestream: remove logging redundant path values in a single error message 2022-12-03 22:01:51 -08:00
flagutil lib/flagutil/bytes.go: properly handle values bigger than 2GiB on 32-bit architectures 2022-12-14 19:26:31 -08:00
formatutil app/vmbackupmanager: add metrics for better observability (#488) 2022-12-20 14:18:06 -08:00
fs lib/{fs,mergeset,storage}: substitute os.Open()+os.File.Readdir() with os.ReadDir() 2023-03-17 21:03:37 -07:00
htmlcomponents app/vmselect: remove dependency on lib/promscrape from app/vmselect 2023-01-03 23:28:27 -08:00
httpserver lib/httpserver: use github.com/klauspost/compress/gzhttp for compressing http responses 2023-02-27 10:33:43 -08:00
influxutils lib/flagutil: rename Array to ArrayString 2022-10-01 18:26:36 +03:00
ingestserver lib/netutil: init implimentation of proxy protocol (#3687) 2023-01-26 23:08:35 -08:00
leveledbytebufferpool all: make fmt via the upcoming Go1.19 2022-07-11 19:22:15 +03:00
logger add error handler for parsing prometheus text format to vmagent and v… (#3693) 2023-01-23 22:14:34 -08:00
lrucache all: remove explicit "xxhash" name when importing github.com/cespare/xxhash/v2 package 2022-06-21 20:23:32 +03:00
memory app,lib: fix typos in comments (#3804) 2023-02-13 13:27:13 +01:00
mergeset all: add Windows build for VictoriaMetrics 2023-03-19 01:36:51 -07:00
metricsql all: make fmt via the upcoming Go1.19 2022-07-11 19:22:15 +03:00
netutil lib/netutil: fixes panic at proxy protocol (#3905) 2023-03-07 08:50:18 -08:00
persistentqueue lib/flagutil/bytes.go: properly handle values bigger than 2GiB on 32-bit architectures 2022-12-14 19:26:31 -08:00
procutil lib/procutil: stop immediately after receiving the second SIGINT or SIGTERM signal 2022-10-20 21:40:20 +03:00
promauth chore: Use http constants to replace numbers (#3846) 2023-02-22 18:53:05 -08:00
prompb app/vminsert: moved -maxInsertRequestSize command-line flag out of lib/prompb in order to prevent its inclusion in vmselect and vmstorage apps 2020-01-28 23:02:08 +02:00
prompbmarshal all: use %w instead of %s for wrapping errors in fmt.Errorf 2020-06-30 23:05:11 +03:00
promrelabel app,lib: fix typos in comments (#3804) 2023-02-13 13:27:13 +01:00
promscrape fix some typo (#3898) 2023-03-03 11:02:13 +01:00
promutils app,lib: fix typos in comments (#3804) 2023-02-13 13:27:13 +01:00
protoparser fix some typo (#3898) 2023-03-03 11:02:13 +01:00
proxy lib/promauth: add ability to send additional http headers in requests to scrape targets 2022-06-22 20:39:43 +03:00
pushmetrics lib/flagutil: rename Array to ArrayString 2022-10-01 18:26:36 +03:00
querytracer lib/querytracer: fix remaining tests after 49ebc48809 2022-12-08 18:18:06 -08:00
regexutil app,lib: fix typos in comments (#3804) 2023-02-13 13:27:13 +01:00
snapshot app/vmbackup: prevent password leaks (#3672) 2023-01-18 11:35:21 -08:00
storage all: add Windows build for VictoriaMetrics 2023-03-19 01:36:51 -07:00
streamaggr app,lib: fix typos in comments (#3804) 2023-02-13 13:27:13 +01:00
syncwg all: open-sourcing single-node version 2019-05-23 00:18:06 +03:00
tenantmetrics app/vminsert: allows parsing tenant id from labels (#3009) 2022-09-30 18:35:53 +03:00
timerpool lib/timerpool: use timer pool in concurrency limiters 2019-05-28 17:20:10 +03:00
uint64set lib/uint64set: use repeatable randomizer in tests 2023-01-23 19:22:58 -08:00
workingsetcache lib/workingsetcache: expose -cacheExpireDuration command-line flag for fine-tuning of the cache expiration 2022-11-17 19:59:13 +02:00
writeconcurrencylimiter lib/writeconcurrencylimiter: initialize concurrencyLimitCh before exporting vm_concurrent_insert_capacity and vm_concurrent_insert_current metrics 2023-02-07 11:08:17 -08:00