Commit graph

358 commits

Author SHA1 Message Date
Todd Gruben
51560213f9 Merge branch 'master' of github.com:umbel/pilosa 2016-09-01 12:07:27 -05:00
Ben Johnson
089650b845 Remove post-mmap resizing 2016-09-01 09:18:52 -06:00
Todd Gruben
c12d8e096b Merge branch 'master' of github.com:umbel/pilosa 2016-08-30 17:36:21 -05:00
Ben Johnson
39e0d22598 Add export command to pilosactl
CSV exports can now be done with the pilosactl application:

	$ pilosactl -d mydb -f myframe -o MYFILE.csv

If `-o` is not specified then the CSV is written to STDOUT. The
exporter combines all slices for the db/frame to into a single
concatenated CSV file.
2016-08-30 16:18:12 -06:00
Todd Gruben
32fec201c0 Merge branch 'master' of github.com:umbel/pilosa 2016-08-26 12:59:55 -05:00
Ben Johnson
04c814141a Optimize bitmap with zero copy
Segments bitmaps by slice and changes `Fragment.Bitmap()` to return
bitmaps with segments which are offset ranges of mmapped bitmaps.
2016-08-25 13:30:25 -06:00
Todd Gruben
838a7ee0f6 Merge branch 'master' of github.com:umbel/pilosa 2016-08-15 18:36:08 -05:00
Ben Johnson
650e03cc79 add CountRange()
This commit adds `roaring.Bitmap.CountRange()` to return the number
of bits in a subrange of a bitmap. This significantly improves
server start time and is needed for upcoming zero copy bitmap
optimizations.
2016-08-15 16:03:25 -06:00
Todd Gruben
ee01ea624f Merge branch 'master' of github.com:umbel/pilosa 2016-08-12 15:10:57 -05:00
Todd Gruben
f5f3a58e96 cache loading 2016-08-12 15:10:50 -05:00
Ben Johnson
6ad7d0bfab fix count() cache retrieval 2016-08-12 11:02:52 -06:00
Ben Johnson
3150471c3c fix bitmap reference bug 2016-08-09 14:57:37 -06:00
Todd Gruben
d79a5e7b0b Merge branch 'master' of github.com:umbel/pilosa 2016-08-08 09:35:43 -05:00
Ben Johnson
a063421467 serialize cache flush
This commit moves the cache flush to the `Index` and only serializes
a single fragment at a time.

Also included in this commit is the `inspect` command for the
`pilsoactl` binary. This provides insight into pilosa data files.
2016-08-05 14:58:37 -06:00
Todd Gruben
8762cf3425 Merge branch 'master' of github.com:umbel/pilosa 2016-07-07 11:23:50 -05:00
Todd Gruben
3e288d6108 ignore checksum on single node clusters 2016-07-07 11:22:15 -05:00
Ben Johnson
1ed2d54855 optimize sparse bitmap block checksums
This commit refactors the block checksumming by removing the
iteration over each block and instead only checking blocks which
have data. This requires merging the cache inspection with the
roaring iterator to reduce CPU time and memory allocations.
2016-07-07 10:03:38 -06:00
Ben Johnson
521b098c83 check for early close during AAE
This commit adds a `Closing` channel to the `IndexSyncer` and the
`FragmentSyncer` that is periodically checked during execution.
If the channel is closed then an in-progress sync is immediately
stopped.
2016-06-29 10:18:24 -06:00
Todd Gruben
a68975bb6f Merge branch 'master' of github.com:umbel/pilosa 2016-06-10 10:21:27 -05:00
Todd Gruben
7d8705868e tuning slicewidth 2016-06-10 10:21:23 -05:00
Ben Johnson
677824c065 add buffered snapshot writer
This commit wraps the snapshot in a `bufio.Writer`.
2016-06-10 08:58:37 -06:00
Ben Johnson
64decdaf81 sort bits on import
This commit sorts bits from import files before performing the input.
2016-06-09 14:25:41 -06:00
Todd Gruben
b40b2ff5ca Merge branch 'master' of github.com:umbel/pilosa 2016-06-07 15:25:42 -05:00
Todd Gruben
dab399e328 added logging on import;crashing bug on sync on empty fragment 2016-06-07 15:25:37 -05:00
Ben Johnson
14627a2152 use db in fragment allocation
This commit changes the fragment allocation algorithm in the cluster
to make use of the `DB` name. This allows each database to use a
different slice distribution.

Initially, the `frame` was going to be used for allocation, however,
this was problematic since queries can span multiple frames so it's
impossible to choose a single frame to use.
2016-06-07 14:01:13 -06:00
Todd Gruben
228865cc35 code cleanup 2016-06-01 14:55:48 -05:00
Todd Gruben
3d4eaecac0 Import optimization 2016-06-01 14:10:34 -05:00
Todd Gruben
ef2cbcdc4b merge 2016-05-25 09:18:57 -05:00
Ben Johnson
722d697228 refactor in-memory bitmap storage
This commit changes the underlying storage for `Bitmap` from a
red-black tree to a roaring bitmap. It also removes bitmaps from
the cache and only stores the bitmap count.
2016-05-24 15:01:49 -06:00
Todd Gruben
cc7d0abe10 Merge branch 'master' of github.com:umbel/pilosa 2016-05-13 19:59:24 -05:00
Todd Gruben
a5b84e092a changed slicewidth 2016-05-13 19:59:14 -05:00
Ben Johnson
c9edabb23d fix import cache updates
This commit fixes a bug in the import where the cache was not being
updated and the block checksum was not being invalidated.
2016-05-11 17:32:28 -06:00
Ben Johnson
de698aa03e consensus block merge
This commit refactors the anti-entropy system to fetch data from
all replicated blocks and only set/clear bits which deviate from
the consensus between all blocks.

An example of this is if 3 nodes had the following bits set for
a single bitmap:

	Node A: 1 2 3
	Node B:   2   4
	Node C: 1 2   4

Then only bits which are set on a majority will be set. In this
case bits 1, 2, & 4 are set but 3 only exists on a single node.

The node performing the merge would then determine the following
set/clear diffs for each node:

	Node A: clear(3), set(4)
	Node B: set(1)
	Node C: none

Once the merge is performed and all nodes receive their diff
instructions then the nodes will be in sync:

	Node A: 1 2 4
	Node B: 1 2 4
	Node C: 1 2 4

There still exists situations where bits can be reset. If Node A
is up and Node B & C are down then Node A's bits will be reset
once B & C come back online. We should add write consistency
settings for incoming writes so that we can ensure that a quorum
is written to before returning a success. This is outside the
scope of this commit though.
2016-05-06 16:19:10 -06:00
Todd Gruben
b565271f94 made Bitmap SetBit method public 2016-04-19 09:22:42 -05:00
Ben Johnson
8f4d7d50c3 active anti-entropy
This commit adds active anti-entropy via a merkle tree structure.
2016-04-12 19:48:32 -06:00
Ben Johnson
26fd00ff3e add 'pilosactl bench' command
This commit adds a simple benchmarking utility to the `pilosactl`
binary. It currently only supports individual `SetBit()` commands
but it's a good start towards making a generic benchmarking
framework at the integration level.

The subcommands and usage/help messages were also cleaned up to
output correctly.
2016-03-31 15:49:57 -06:00
Ben Johnson
c753052f78 snapshot after op threshold
This commit changes `SetBit()` and `ClearBit()` to issue a
snapshot after a certain number of calls are made on a given
fragment.

Fixes #66
2016-03-30 15:28:42 -06:00
Ben Johnson
ab3358ae77 add cache to fragment backup/restore
This commit changes the backup format of a fragment from a
simple file stream to a tar archive which combines the data file
and the cache file.

Fixes #63
2016-03-17 15:48:48 -06:00
Ben Johnson
5a63a14742 refetch full counts for TopN()
This commits adds refetching to get the actual TopN() count
after the top bitmaps are determined.

Fixes #57
2016-03-03 13:03:20 -07:00
Todd Gruben
7c33b7fcf2 merge 2016-02-26 12:13:03 -06:00
Ben Johnson
c64199a69e add backup/restore endpoints
This commit adds io.ReaderFrom and io.WriterTo implementations to
the Fragment and also adds backup & restore endpoints to the Handler.
2016-02-25 17:29:45 -07:00
Todd Gruben
0d620aae61 align more with go idioms 2016-02-24 15:02:24 -06:00
Todd Gruben
759ad537be merged 2016-02-24 14:19:44 -06:00
Todd Gruben
9fc6a39d65 adjust SetBit/ClearBit to releably report bit change 2016-02-24 14:00:41 -06:00
Ben Johnson
cca8970019 add Range() support
This commit adds support for setting bits in time-based frames.
2016-02-23 14:53:03 -07:00
Todd Gruben
5862f714b3 removed debugging code' 2016-02-17 13:23:30 -06:00
Todd Gruben
4394a97db8 changed protobuf to uint; doesn't work 2016-02-17 11:06:57 -06:00
Todd Gruben
3bd5182f96 added support for returning SetBit effect 2016-02-16 17:38:56 -06:00
Ben Johnson
f0fa03da83 refactor attribute stores
This commit refactors the profile and bitmap attribute stores so
that they share the same code. There is a new `AttrStore` which
associates key/value pairs with a `uint64` identifier.

The previous JSON encoding has been fixed to use protobufs which
fixes encoding issues for int64.
2016-02-16 13:41:37 -07:00
Ben Johnson
b28e961f2e add cache persistence
This commit adds the ability of the Fragment to flush the cache
bitmap IDs to disk periodically. They can then be reloaded when
the fragment is reopened.
2016-02-13 10:02:53 -07:00