Commit Graph

871 Commits (60b051ee885c9ca4dac10cbd0448773ac3f77d19)

Author SHA1 Message Date
Jason Wilder 48d4156eac Fix blocks not sorted correctly when chunking 2015-12-23 18:01:11 -07:00
Jason Wilder bb2562b2ab Return CompactionGroups from planning 2015-12-23 18:01:11 -07:00
Jason Wilder d0ec0a15e2 Fix wrong test data setup 2015-12-23 18:01:11 -07:00
Ady 5c888b3673 Merge branch 'master' of https://github.com/influxdb/influxdb into mvadu-patch-4358
Trying to get to latest master from influxdb
2015-12-19 01:45:07 +05:30
Jason Wilder 7e97b0eafd Fix rename temp file on windows 2015-12-18 11:57:37 -07:00
Jason Wilder 611017f4ed Add comments 2015-12-18 10:00:07 -07:00
Jason Wilder 930174bf4d Handle calling WriteBlock with no data gracefully 2015-12-18 09:57:16 -07:00
Jason Wilder 6bc7765b88 Handle calling write with no values to TSMWriter gracefully 2015-12-18 09:52:53 -07:00
Jason Wilder 421a127f11 Add indirectIndex.UnmarshalBinary benchmark 2015-12-17 15:38:51 -07:00
Jason Wilder 8c7e11f4cf Aggressively clean up KeyCursor resources 2015-12-17 12:51:51 -07:00
Jason Wilder fd2a409ea3 Skip decoding blocks that are already full 2015-12-17 12:47:05 -07:00
Jason Wilder 825296ddd8 Add comments 2015-12-16 11:30:06 -07:00
Jason Wilder 88324bf61c Optimize indirectIndex.UnmarshalBinary further 2015-12-16 11:28:13 -07:00
Jason Wilder 70d1f45058 Load TSM files concurrently 2015-12-16 11:28:12 -07:00
Jason Wilder 737871268b Speed up indirectIndex.UnmarshalBinary
Remove a bunch of unnecessary allocations to improve startup times.
2015-12-16 11:16:17 -07:00
Jason Wilder 3893bc60e1 Speed up TSM compactor
Just keep the current block for each iterator in the buffers.
2015-12-16 11:16:17 -07:00
Jason Wilder 00f570441b Convert TSMKeyIterator to return blocks 2015-12-16 11:16:17 -07:00
Jason Wilder 59a57d8f73 Convert CacheKeyIterator to return encoded blocks 2015-12-16 11:16:17 -07:00
Jason Wilder 0623648140 Add chunking support back to TSMKeyIterator
Was removed when MergeIterator was deleted.
2015-12-16 11:16:17 -07:00
Jason Wilder 31b97c3fe0 Add max points per block back for CacheKeyIterator
Was removed when MergeIterator was removeed.
2015-12-16 11:16:16 -07:00
Jason Wilder 45e87cdfe4 Strip checksum when returning block from ReadBytes 2015-12-16 11:16:16 -07:00
Jason Wilder 97435b9124 Return minTime/maxTime from BlockIterator.Read 2015-12-16 11:16:16 -07:00
Jason Wilder ce6de9728e Add test for BlockIterator with multiple blocks for a key 2015-12-16 11:16:16 -07:00
Jason Wilder 4a3037814f Add WriteBlock to TSMWriter 2015-12-16 11:16:16 -07:00
Jason Wilder d99c1f944e Add BlockIterator for reading TSM blocks without decoding 2015-12-16 11:16:16 -07:00
Jason Wilder 928aef04cd Split data_file.go into reader.go and writer.go 2015-12-16 11:16:16 -07:00
Philip O'Toole 47317d73b4 Merge pull request #5131 from influxdb/site-fixes
Default data logging to on
2015-12-16 10:03:25 -08:00
Alexandre Viau ad1044dde9 typo: unkown -> unknown 2015-12-15 18:10:47 -05:00
Philip O'Toole d45048455a Default data logging to on 2015-12-15 13:15:38 -08:00
Philip O'Toole 0e4bc275d8 Merge pull request #5115 from influxdb/site-fixes
Log TSM initialization
2015-12-15 13:13:17 -08:00
Philip O'Toole 01ac0b3f23 Tweak compaction log messages 2015-12-15 10:33:13 -08:00
dgnorton d89e233567 Merge pull request #5100 from influxdb/dgn-fix-4303
fix #4303: don't drop from multiple databases
2015-12-15 07:27:05 -05:00
Philip O'Toole a6cdb5229d Log tsm initialization 2015-12-14 15:50:56 -08:00
David Norton 3014fb90e4 fix #4303: don't drop from multiple databases 2015-12-12 13:54:23 -05:00
Philip O'Toole 75764517f6 Merge pull request #5082 from li-ang/fix_x
Fix wrong value of countCompacting in WAL
2015-12-11 10:07:56 -08:00
Philip O'Toole 03f8cd3956 Add comment explaining magic number 2015-12-10 11:46:40 -08:00
Jason Wilder 631ecc23de Fix growing destination buffer during WAL entry encoding
The test to see if the destination buffer for encoding and decoding a WAL
entry was broken and would cause a panic if there were large batches that
would overflow the buffer size.

Fixes #5075
2015-12-10 11:46:40 -08:00
liang@qiniu.com 34bdffdb00 Fix wrong value of countCompacting in wal 2015-12-10 17:47:20 +08:00
Nathaniel Cook b7000c80dd count with fill(none) will drop 0 valued intervals 2015-12-09 15:20:47 -07:00
Ady 07c0939fe1 Added logic To let the memeory mapped files to renamed by OS. Now a copy
is created in memory with SHARED_DELETE flag, so that OS is free to rename
or delete original file
2015-12-10 01:07:50 +05:30
Philip O'Toole da08304780 Merge pull request #4940 from li-ang/fix_aggregative_query_err
Fix distributed aggregative query error
2015-12-09 11:04:40 -08:00
Jason Wilder 992aea7bd3 Merge pull request #5060 from influxdb/jw-drop-db
Cancel writing TSM files when engine closes
2015-12-08 16:16:07 -07:00
Paul Dix b192136887 Merge pull request #5058 from influxdb/pd-update-compaction-logic
Update TSM compaction logic
2015-12-08 18:14:15 -05:00
Paul Dix 27cc2ea0cc Update compact.Plan 2015-12-08 18:01:31 -05:00
Jason Wilder d7cff651d1 Cancel writing TSM files when engine closes
If the engine is closed while a compaction is going on, the close call
blocks until the goroutine exits.  This could be several minutes because
the control does not return back up to the channel selector while there is
still data to write.
2015-12-08 15:41:53 -07:00
Paul Dix 96445a53a7 Update TSM compaction logic
* Update compaction to look at newest files of the smallest step first
* Update compaction to look at older files in larger steps if newer files don't have enough small steps to compact
* Changed the TestDefaultCompactionPlanner_CombineSequence test to reflect what's possible now. We'd only have multiple files in the same generation if the all files but one were over the max allowable size.
* Clean up the logic on when full compactions are run and when planning can be skipped
2015-12-08 17:33:38 -05:00
Jason Wilder 62cb3a1e9b Merge pull request #5057 from influxdb/jw-5046
Fix leaking TSM files when compacting
2015-12-08 13:11:46 -07:00
Jason Wilder 3543917a74 Avoid allocating strings during search 2015-12-08 13:02:17 -07:00
Jason Wilder 99c313ddae Fix leaking TSM files when compacting
The files being read were not closed after the compaction ran causing
them to leak.

Fixes #5046
2015-12-08 12:55:30 -07:00
Jason Wilder 9d82e24ca0 Fix performance of dropping large number of keys 2015-12-08 10:47:06 -07:00
Jason Wilder f245b44afa Set full compaction duration option on planner
Was set on engine and not planner so it was always 0.
2015-12-08 09:56:36 -07:00
Jason Wilder d32aeb2535 Merge pull request #5031 from influxdb/jw-mintime
Dedupe points at query time if there are overlapping blocks
2015-12-07 21:28:29 -07:00
Jason Wilder 87892d79da Dedupe points at query time if there are overlapping blocks 2015-12-07 21:10:10 -07:00
Fazal Majid bb386219f4 ran go fmt on mmap_solaris.go #4787 2015-12-07 17:41:26 -08:00
Fazal Majid 0f889a77d1 fix tsm1 for Solaris #4787, passes unit tests now 2015-12-07 17:14:26 -08:00
liang@qiniu.com c13f8e9128 Fix wrong results of distributed aggregative query 2015-12-08 07:08:46 +08:00
Jason Wilder 4f30d396ae Merge pull request #5026 from influxdb/jw-mintime
Optimize TSM queries with time filter
2015-12-07 15:49:58 -07:00
Jason Wilder a2583d2be1 Reduce lock contention when planning TSM queries 2015-12-07 15:42:36 -07:00
Jason Wilder 4da20c49e9 Optimize TSM file scanning for time queries
Move the index locations planning to be lazily created after the first
seek when we know what time and direction we're searching for.  This
allows files and blocks to be skip before having to scan the files index.

This improves queries times with time filters wherne there are many TSM
files on disk.
2015-12-07 15:42:36 -07:00
Philip O'Toole 99fa678932 Test and variable rename for aggregate math
Fixes nits from https://github.com/influxdb/influxdb/pull/5013.
2015-12-07 14:18:49 -08:00
Philip O'Toole 5d5afcbe50 Merge pull request #5013 from mengjinglei/fix-math-panic
fix aggregate math query
2015-12-07 14:07:48 -08:00
Nathaniel Cook ae4140d384 Merge pull request #5000 from influxdb/nc-issue#4849
Update Derivative for PositionPoint objects
2015-12-07 13:59:15 -07:00
Paul Dix 93d6afec97 Merge pull request #5019 from influxdb/jw-mintime
Remove min time from TSM blocks
2015-12-07 15:00:12 -05:00
Nathaniel Cook 7ffbbc1072 make fill previous for count() queries work 2015-12-07 12:51:40 -07:00
Nathaniel Cook 06bc25d64b add integration tests for derivative calls and all other valid functions, convert PositionPoint to float64 2015-12-07 12:51:39 -07:00
Paul Dix 8096c6b845 Update TSM, address PR #5011 comments
* Moved TSM file extension to a constant
* Fixed typos
* Changed group.size() back to being a uint64 since it can have multiple files up to 4GB each.
2015-12-07 14:47:17 -05:00
Paul Dix 820b0d31d6 Update TSM to delete from the WAL/cache
* Update cache loader to delete entries from cache
* Add cache.Delete()
* Update delete to look at keys in the Cache in addition to the FileStore
* Update cache compaction to never happen if the cache is empty
2015-12-07 14:35:48 -05:00
Jason Wilder cf341eaa6a Remove MinTime from blocks
MinTime is not in the index for each block so storing it in the block
header is redundant.  The encodings also store it in their header so
we are actually storing it 3 times.

Removing this is an incompatible change with the current tsm1 file format.
2015-12-07 11:26:58 -07:00
Adarsha 5482c6de03 Avoid closing the handle in mmap
Added mmap implementation for Windows. It uses MapViewOfFile similar to Bolt's implementation. MapViewOfFile  returns a pointer and not a byte array. Bolt changed their data structure to support it. 

Instead of changing the implementation of tsm data structure, I used a trick shown in https://groups.google.com/forum/#!topic/golang-nuts/g0nLwQI9www to use SliceHeader to convert the pointer into a slice.

Bolt's implementation also closes the file handle in mmap itself. It was resulting in a timeout, so implemented https://github.com/edsrzf/mmap-go/blob/master/mmap_windows.go logic to keep file handle open until munmap
2015-12-07 23:30:19 +05:30
Paul Dix 440a8a8a1f Change all TSM file sizes to uint32 2015-12-07 10:12:24 -05:00
Paul Dix 937233d988 Update TSM compaction planning logic
* Update Plan to do a full compaction if cold for writes
* Remove MaxFileSize as a config variable from Compactor. Should be a set constant
* Update Plan to keep track of if the last check was fully compacted so we can skip future planning calls
* Update compact min file count to 3 so that compactions run more frequently
2015-12-07 08:26:30 -05:00
mengjinglei 5111676646 fix aggregate math query 2015-12-07 16:55:20 +08:00
Paul Dix 1bee7d1512 Update TSM, remove old version, add config
* remove rolloverTSMFileSize constant that is no longer used
* remove the maxGenerationFileCount since it is no longer a limitation that's necessary with the new compaction scheme. We no longer read WAL segments as part of the compaction so memory is only used as we read in each individual key
* remove minFileCount and switch to a user configurable variable
* remove the mutex from WALSegmentWriter. There's never more than one open in the WAL at one time and it's not exported through any function so the lock on the WAL should be used. This simplified keeping track of the last write time and removed a bunch of unnecessary locks.
* update WALSegmentWriter.Write to take the compressed bytes so that encoding and compression can occur before the call to write (while we don't hold the WAL lock)
* remove a bunch of unnecessary locking in WAL.writeToLog
* Add check for TSM file magic number and vesion
* Remove old tsm, log, and unused cursor code
* Remove references to tsm1dev everywhere except in the inspector
* Clean up config options for compaction and snapshotting
* Remove old TSM configuration options
* Update the config.sample.toml with TSM options
* Update WAL compact to force if it has been cold for writes for a configurable period of time (1h by default)
2015-12-06 18:50:39 -05:00
Philip O'Toole 6e88547a5e Support shutting down engine goroutines
This was causing races in the code, when the cache was being reloaded,
because back-to-back open-and-closing of the engine during testing left
goroutines running. With this change the engine is completely shutdown
when Close() is called on it.
2015-12-06 09:16:38 -08:00
Philip O'Toole 0d0b919144 Integrate CacheLoader with tsm2 engine 2015-12-05 22:13:57 -08:00
Philip O'Toole fe7b3ad134 Add CacheLoader
The CacheLoader loads a given cache from a slice of segment files.
2015-12-05 22:13:57 -08:00
Philip O'Toole 4b5fb8db72 WALSegmentReader counts bytes read without error 2015-12-05 22:13:57 -08:00
Philip O'Toole c67831bc79 Remove double-checking of error when reading WAL 2015-12-05 22:13:57 -08:00
Paul Dix 40e606cb14 Merge pull request #5003 from influxdb/jw-compaction
Update compaction planning
2015-12-05 16:49:54 -05:00
Jason Wilder 33a33e6a23 Fix 32bit int overflow of constant value 2015-12-05 13:09:18 -07:00
Jason Wilder 41b24995a7 Compcation fixes 2015-12-05 12:19:28 -07:00
Philip O'Toole 7296de1fac Merge pull request #4999 from influxdb/cache_sort
Always copy the Cache values for query and merge with snapshot
2015-12-05 08:15:13 -08:00
Philip O'Toole 1b12ff9c1c Only take write-lock for Values when necessary 2015-12-05 08:06:01 -08:00
Jason Wilder 6592615958 Updated compaction strategy
This changes compacting files to merge sequences of files in lower generations
up to later generations
2015-12-04 23:30:39 -07:00
Philip O'Toole 789ab10658 Merge hot cache values with snapshots
This change starts by building the sequence of entries, which also
allows the required size of destination buffer to be calculated. Then
the buffer is allocated up-front in 1 call.

Each snapshot and hot value-set is appended to the buffer. If ordering
is violated at anytime, set the 'needSort' flag. Sorting, if necessary,
is performed just before returning the data.
2015-12-04 20:58:02 -08:00
Philip O'Toole 859877fd09 Move all sort logic to entry type 2015-12-04 20:21:16 -08:00
Philip O'Toole 6e91679fab Always copy the Cache values for query 2015-12-04 15:37:45 -08:00
Paul Dix 9637446ba9 Merge pull request #4990 from influxdb/pd-loadmetadata-wal
Update TSM engine, WAL and encoding
2015-12-04 18:21:47 -05:00
Paul Dix 33506e4d3e Update TSM cache and engine LoadMetadataIndex 2015-12-04 16:40:01 -05:00
Paul Dix b0f3dcc8cc Update TSM metadata loading and write snapshot
* Update WriteSnapshot to always call synchronously
* Update LoadMetadataIndex to load WAL metadata from the cache
2015-12-04 16:03:17 -05:00
Jason Wilder 357b88c439 Increment sequence of max generation when compaction files 2015-12-04 13:46:28 -07:00
Nathaniel Cook bd6961a00e Validate previous value in derivative calc as well 2015-12-04 13:01:37 -07:00
Philip O'Toole 5c63ccaa6f Revert "Merge pull request #4988 from influxdb/revert-4984-fix-query-panic"
This reverts commit 44ff2f87db, reversing
changes made to 6fa016447f.
2015-12-04 11:05:02 -08:00
Jason Wilder 52bec1f7f6 Change TSM file naming to generation-sequence.tsm 2015-12-04 11:51:33 -07:00
Jason Wilder 479469994a Optimize FileStats calls
FileStats called frequently during compaction planning was too expensive because
they were cleared out every time a file replaced causing them all to be reloaded.
Insted, we grab the stats that are already maintained by the files themselves from
the files when needed.
2015-12-04 11:16:39 -07:00
Jason Wilder 70710df910 Fix typo 2015-12-04 10:02:59 -07:00
Jason Wilder c7e37766e7 Avoid repetitive index searches when iterating over cursors
First pass at TSM cursor iteration ended up searching the file indexes
too frequently and hurt performance.  This changes that to search it once
and then have the cursor hold onto the block locations to seek
to.  Doubles the query performance from the first iteration, but still a lot
of room for improvement.
2015-12-04 10:02:59 -07:00
Jason Wilder 4b7cc6720a Merge pull request #4983 from influxdb/jw-tsm-deletes2
Implement delete series/measurement
2015-12-04 10:02:11 -07:00
Jason Wilder c54a3da0ca Implement delete series/measurement 2015-12-04 09:10:26 -07:00
Paul Dix eafb703afc Update TSM engine, WAL and encoding
* Add InfluxQLType to Values to map the TSM type to InfluxQL
* Fix bug in WAL where close wouldn't nil out the currentSegment after closing it
* Export writeSnapshot to be used in tests, add argument to run it async or not
* Update reloadCache to load temporary metadata information in the engine
* Update LoadMetadataIndex to use the temp WAL metadata information
2015-12-04 11:09:39 -05:00