No description
Find a file
Seebs 9f2b888c4f standardize and correct time range handling
If you're wondering how something that simple gets a commit
message this long, sit down, because you are in for a ride.

The Row, Rows, TopK, and GroupBy(Rows...) commands had three
different sets of semantics for from/to ranges. We unify these.
Sounds easy, right?

The original purpose of this was to address a bug in GroupBy
where, if you had multiple queries only one of which used time,
we could end up silently returning no results because we tried to
do a time query against a non-time field. This was easy to
fix; just move a boolean flag from outside a loop to inside
the loop so it resets to false on each pass.

In the process of trying to test that, I discovered that
specifying `from=...` without `to=...` in a Rows in a GroupBy
didn't work. Searching around, I discovered that we had three
different answers:

	GroupBy, TopK: unspecified 'to=' is 0
	Row: unspecified to is tomorrow
	Rows: unspecified to is the max time quantum in the field

(A time value of 0 is apparently interpreted as January 1st,
0001.) Note that "GroupBy" is really referring to a Rows()
command in a GroupBy, it's just that this uses completely different
code (because it has to be computing rows potentially matching or
restricted to a filter, or provide the rows it generated so
they can be used to filter something else).

So we fixed that, and made a field method for finding the min/max
values (as done in a Rows command that *isn't* in a GroupBy),
and tried to use that with viewsByTimeRange. Then I tried to write
documentation for this, but the documentation was unclear, and
I tried to clear it up. Which caused me to discover that these
four different places ALSO differed in when or whether they'd
replace a broad query with "just the standard view".

So. Round two of the fix: We create a `field.viewsByTimeRange`,
which tries to fall back to a standard view when one exists
and the specified range covers everything, and treats zero
values as non-restrictive, but also picks a narrow range that
is actually related to the range of dates in the field. This
matters because viewsByTimeRange generates the entire set of
views it would need *even if those views don't exist*.

We drop one test that was testing Rows specifically to verify
that, if you omitted To, we acted as though you'd specified a date
two days in the future. That behavior is not now intended, so
we drop the test that tries to verify it.

Thing that might make this better: Figuring out a way to generate the
list of views more cheaply. Right now, we're redoing all the view
computation, including producing a sorted list of view names, for
every shard. This is excessive, but hard to fix.

In particular, there is no trivial way to generate a sorting such
that you can take slices of it and have them be the right slices,
because we want to skip smaller time quanta when an entire larger
parent quantum is included. e.g., if we're including all of
April 2022, we don't want to include any of the days for April of
2022, but if we're doing up through April 15th, we want to include
the first 15 days of April, but NOT include the whole-month quantum.
And so on. Fixing this cleanly is hard and would require a
significant design effort.
2022-04-08 14:19:36 -05:00
.github remove references to CONTRIBUTING and CHANGELOG 2021-11-19 11:22:15 -06:00
.gitlab make the test a gauntlet test, uncomment all the others 2022-04-05 15:00:32 -05:00
api/client Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
authn fb1172: enable refresh tokens 2022-02-07 13:42:11 -06:00
authz Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
boltdb use free id bucket to re-use ids 2022-02-28 15:56:58 -06:00
client client side retry ingestAPI requests on primary host 2022-03-10 10:22:13 -06:00
cmd FB-1188 - improved description of TTL 2022-03-07 11:16:33 -06:00
ctl listen on localhost:0 instead of :0 2022-03-18 13:38:30 -05:00
debugstats add copyright notice back in 2021-12-10 11:01:04 -06:00
disco requested idx == nil fix; add doc comment 2022-02-14 10:09:33 -08:00
encoding/proto FB-1188 - removed parseDuration error logs in proto.go 2022-03-07 11:45:29 -06:00
etcd listen on localhost:0 instead of :0 2022-03-18 13:38:30 -05:00
gcnotify Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
generator add copyright notice back in 2021-12-10 11:01:04 -06:00
gopsutil Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
hash Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
ingest Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
ingest_testdata allow ingest API delete to work at all, add test for it 2022-04-01 09:48:51 -05:00
install rip out ui/usage 2022-02-28 12:05:44 -06:00
internal fix the spots where gitlab thinks we're using hard-coded passwords 2022-04-07 12:22:45 -04:00
lattice Revert auto-quoting in Web UI 2022-03-03 12:35:54 -07:00
logger Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
lru fix some staticcheck issues 2021-12-03 09:31:45 -06:00
mock Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
net add copyright notice back in 2021-12-10 11:01:04 -06:00
pb FB-1188 - Added TTL field option 2022-02-25 11:39:31 -06:00
pg listen on localhost:0 instead of :0 2022-03-18 13:38:30 -05:00
pql allow empty values to be provided for vars in Row call 2022-03-24 10:45:30 -05:00
prometheus Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
proto Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
qa Timestamp FieldOptions should include Min and Max when marshalled to JSON 2022-04-06 16:29:24 -05:00
rbf Allow fsync() to be disabled on RBF WAL only 2022-03-25 15:16:41 -06:00
roaring go fmt 2022-03-10 09:03:07 -06:00
scripts Fix benchmark file naming 2021-05-21 14:51:08 -06:00
server listen on localhost:0 instead of :0 2022-03-18 13:38:30 -05:00
shardwidth Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
short_txkey remove a bunch of commented print statements and unecessary prints 2022-01-11 10:42:44 -06:00
sql Use Distinct() call for SQL DISTINCT 2022-03-01 15:04:32 -07:00
sql2 Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
statik Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
stats only set bits after the holder is completely setup 2022-02-25 15:02:24 -06:00
statsd Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
storage remove a bunch of roaring backend stuff 2022-02-02 20:56:18 -06:00
syswrap add copyright notice back in 2021-12-10 11:01:04 -06:00
task implement a task pool 2022-02-14 09:56:19 -06:00
test listen on localhost:0 instead of :0 2022-03-18 13:38:30 -05:00
testdata Test cases for Store(Distinct) 2020-09-14 14:15:29 -05:00
testhook Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
toml add copyright notice back in 2021-12-10 11:01:04 -06:00
topology Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
tracing Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
txkey remove a bunch of commented print statements and unecessary prints 2022-01-11 10:42:44 -06:00
vprint add copyright notice back in 2021-12-10 11:01:04 -06:00
.dockerignore Add new Docker build process and continuous delivery 2021-02-26 14:34:14 -06:00
.gitignore removed tfstate.backup files 2022-02-24 10:24:27 -06:00
.golangci.yml fix govet and gofmt errors in existing code 2021-10-29 13:14:27 -05:00
api.go TranslateData should only redirect to an up node 2022-04-04 15:38:47 -05:00
api_test.go refactor AddAuthToken to fallback to userinfo 2022-03-30 16:52:24 -05:00
apimethod_string.go FB-1188 - Added TTL field option 2022-02-25 11:39:31 -06:00
audit.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
audit_internal_test.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
audit_test.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
broadcast.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
bsi.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
bsi_test.go add copyright notice back in 2021-12-10 11:01:04 -06:00
cache.go Periodically invalidate rank cache during bulk add 2022-02-15 08:25:45 -07:00
cache_test.go Periodically invalidate rank cache during bulk add 2022-02-15 08:25:45 -07:00
catcher.go remove RemoveChannel 2022-03-29 13:42:20 -05:00
cluster.go remove http subpackage and bring implementations into core 2022-02-03 21:04:04 -06:00
cluster_internal_test.go track closing status for index/field/view, shut down cache flush early 2022-03-18 14:41:44 -05:00
cmd.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
const_amd64.go add copyright notice back in 2021-12-10 11:01:04 -06:00
const_other.go add copyright notice back in 2021-12-10 11:01:04 -06:00
dbshard.go remove unused stuff and fix a bunch of random staticcheck issues 2022-02-07 15:10:10 -06:00
dbshard_internal_test.go comment cleanup and removed long test 2022-02-25 16:40:04 -06:00
dbshard_test.go remove http subpackage and bring implementations into core 2022-02-03 21:04:04 -06:00
delete_test.go Add regression test for FB-1281 2022-03-24 15:20:57 -06:00
diagnostics.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
diagnostics_internal_test.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
doc.go add copyright notice back in 2021-12-10 11:01:04 -06:00
Dockerfile remove references to LICENSE and checks for it in source files 2021-11-19 10:38:06 -06:00
Dockerfile-clustertests bump go to go 1.17.7 2022-03-08 08:38:07 -06:00
Dockerfile-clustertests-client bump go to go 1.17.7 2022-03-08 08:38:07 -06:00
event.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
executor.go standardize and correct time range handling 2022-04-08 14:19:36 -05:00
executor_internal_test.go track closing status for index/field/view, shut down cache flush early 2022-03-18 14:41:44 -05:00
executor_test.go standardize and correct time range handling 2022-04-08 14:19:36 -05:00
field.go standardize and correct time range handling 2022-04-08 14:19:36 -05:00
field_internal_test.go standardize and correct time range handling 2022-04-08 14:19:36 -05:00
field_test.go Timestamp FieldOptions should include Min and Max when marshalled to JSON 2022-04-06 16:29:24 -05:00
filesystem.go add copyright notice back in 2021-12-10 11:01:04 -06:00
fragment.go implement a BSI-aware filter to avoid OffsetRange calls in fragment.sum 2022-02-28 14:41:30 -06:00
fragment_internal_test.go track closing status for index/field/view, shut down cache flush early 2022-03-18 14:41:44 -05:00
gc.go add copyright notice back in 2021-12-10 11:01:04 -06:00
gid.go database per shard, HolderConfig, rbf bit-wise import speedups. 2020-09-04 13:00:33 -05:00
go.mod go mod tidy 2022-03-01 10:54:53 -06:00
go.sum go mod tidy 2022-03-01 10:54:53 -06:00
hack.go hard code field options 2022-03-16 14:49:58 -05:00
handler.go remove http subpackage and bring implementations into core 2022-02-03 21:04:04 -06:00
holder.go track closing status for index/field/view, shut down cache flush early 2022-03-18 14:41:44 -05:00
holder_internal_test.go address reviewer's comments 2022-03-10 09:36:18 -06:00
holder_test.go track closing status for index/field/view, shut down cache flush early 2022-03-18 14:41:44 -05:00
http_handler.go fix the spots where gitlab thinks we're using hard-coded passwords 2022-04-07 12:22:45 -04:00
http_handler_internal_test.go add /internal/disk-usage endpoint for testing 2022-03-14 15:23:15 -05:00
http_handler_test.go listen on localhost:0 instead of :0 2022-03-18 13:38:30 -05:00
http_translator.go remove http subpackage and bring implementations into core 2022-02-03 21:04:04 -06:00
http_translator_test.go remove http subpackage and bring implementations into core 2022-02-03 21:04:04 -06:00
idalloc.go add copyright notice back in 2021-12-10 11:01:04 -06:00
idalloc_test.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
index.go prevent concurrent map writes in openField 2022-03-21 14:34:39 -05:00
index_internal_test.go remove unused stuff and fix a bunch of random staticcheck issues 2022-02-07 15:10:10 -06:00
index_test.go track closing status for index/field/view, shut down cache flush early 2022-03-18 14:41:44 -05:00
ingest_test.go allow ingest API delete to work at all, add test for it 2022-04-01 09:48:51 -05:00
internal_client.go refactor AddAuthToken to fallback to userinfo 2022-03-30 16:52:24 -05:00
internal_client_test.go refactor AddAuthToken to fallback to userinfo 2022-03-30 16:52:24 -05:00
iterator.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
iterator_internal_test.go add copyright notice back in 2021-12-10 11:01:04 -06:00
license.exceptions update license header check exceptions 2021-05-14 10:45:46 -04:00
like.go add copyright notice back in 2021-12-10 11:01:04 -06:00
like_test.go add copyright notice back in 2021-12-10 11:01:04 -06:00
main_test.go listen on localhost:0 instead of :0 2022-03-18 13:38:30 -05:00
Makefile use the env var for project 2022-03-23 08:55:23 -05:00
metrics.go add copyright notice back in 2021-12-10 11:01:04 -06:00
nfpm.yaml FB-904: Add deb/rpm packaging of FeatureBase binary 2021-11-04 10:32:59 -06:00
NOTICE add config files for release 2021-11-19 01:26:18 +03:00
pilosa.go test multiple field creations at once on a cluster 2022-03-04 10:21:18 -06:00
pilosa_internal_test.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
pilosa_test.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
planner.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
planner_test.go track closing status for index/field/view, shut down cache flush early 2022-03-18 14:41:44 -05:00
pprof.go remove a bunch of roaring backend stuff 2022-02-02 20:56:18 -06:00
rbf.go remove RemoveChannel 2022-03-29 13:42:20 -05:00
README.md add coverage, code quality badges 2022-03-30 10:07:23 -05:00
row.go remove string keys on delete to allow for reuse 2022-02-25 16:23:54 -06:00
row_test.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
serializer.go add copyright notice back in 2021-12-10 11:01:04 -06:00
server.go FB-1188 - TTL - run TtlRemoval on server start, better ttl log info message 2022-03-11 11:37:36 -06:00
server_internal_test.go improve Server WaitGroup concurrent usage 2022-02-25 15:02:21 -06:00
server_test.go FB-1188 - added more unit tests 2022-03-03 16:09:37 -06:00
stattx.go remove RemoveChannel 2022-03-29 13:42:20 -05:00
time.go fix viewTimePart to account for bad strings 2022-03-25 11:27:39 -05:00
time_internal_test.go fix viewTimePart to account for bad strings 2022-03-25 11:27:39 -05:00
tracker.go add copyright notice back in 2021-12-10 11:01:04 -06:00
tracker_test.go add copyright notice back in 2021-12-10 11:01:04 -06:00
transaction.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
transaction_test.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
translate.go remove string keys on delete to allow for reuse 2022-02-25 16:23:54 -06:00
translator_test.go remove http subpackage and bring implementations into core 2022-02-03 21:04:04 -06:00
tx.go remove RemoveChannel 2022-03-29 13:42:20 -05:00
tx_internal_test.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
tx_test.go remove string keys on delete to allow for reuse 2022-02-25 16:23:54 -06:00
txfactory.go . 2022-03-11 06:20:07 -06:00
txfactory_internal_test.go remove a bunch of roaring backend stuff 2022-02-02 20:56:18 -06:00
util.go add /internal/disk-usage endpoint for testing 2022-03-14 15:23:15 -05:00
util_test.go add /internal/disk-usage endpoint for testing 2022-03-14 15:23:15 -05:00
utils_internal_test.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
version.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00
view.go track closing status for index/field/view, shut down cache flush early 2022-03-18 14:41:44 -05:00
view_internal_test.go Upgrade go.mod to featurebase/v3 2022-01-21 10:57:05 -07:00

FeatureBase, a distributed bitmap index

Coverage SecurityRating Quality Gate Status

See our internal documentation, which includes all external documentation, plus many internal-only pages, listed under the "Internal" heading in the main navigation bar.

Follow along with the Sample Project to get a better understanding of FeatureBase's capabilities.