Commit Graph

289 Commits

Author SHA1 Message Date
Ben Kalman cdfbee1b3d Remove spec GetDataset/GetDatabase/GetPath, update all clients (#2815)
These are now ForDataset/ForDatabase/ForPath.
2016-11-09 17:34:39 -08:00
Dan Willhite b6b1389c30 Danloader (#2794)
* Downloader

* Review changes
2016-11-08 16:46:55 -08:00
Ben Kalman 172b991ac1 Port new Spec API to Go from JS (#2807)
This is a side-by-side port, taking inspiration from the old dataspec.go
code. Notably:

- LDB support has been added in Go. It wasn't needed in JS.
- There is an Href() method on Spec now.
- Go now handles IPV6.
- Go no longer treats access_token specially.
- Go now has Pin.
- I found some issues in the JS while doing this, I'll fix later.

I've also updated the config code to use the new API so that basically
all the Go samples use the code, even if they don't really change.
2016-11-08 14:18:47 -08:00
Ben Kalman 5ab12777f6 Remove the demo server and receipt code (again) (#2808) 2016-11-07 15:13:28 -08:00
cmasone-attic 7dc5867142 Close and destroy databases being left open during tests (#2806)
There were several tests in the Database suites that were failing to
close test Databases that had orderedChunkCaches in them (backed by
levelDBs). Close them.

I was ALSO failing to destroy the cache used in LocalDatabase
instances only while testing Pull(). That's cleared up now as well.
2016-11-04 16:25:53 -07:00
cmasone-attic 12ddb66fc5 Clobber ValueStore cache entry on WriteValue (#2804)
ValueStore caches Values that are read out of it, but it doesn't
do the same for Values that are written. This is because we expect
that reading Values shortly after writing them is an uncommon usage
pattern, and because the Chunks that make up novel Values are
generally efficiently retrievable from the BatchStore that backs
a ValueStore. The problem discovered in issue #2802 is that ValueStore
caches non-existence as well as existence of read Values. So, reading
a Value that doesn't exist in the DB would result in the ValueStore
permanently returning nil for that Value -- even if you then go and
write it to the DB.

This patch drops the cache entry for a Value whenever it's written.

Fixes #2802
2016-11-04 15:53:26 -07:00
cmasone-attic 0400b0cf3f Don't use invalid Root in bad version test (#2800)
The httpBatchStore test TestVersionMismatch() expects a panic,
but the test was actually potentially causing MULTIPLE panics.
One due to the version mismatch, and another due to using an
invalid root.
2016-11-03 15:48:18 -07:00
Dan Willhite 46586ee928 Remove msg args from d.PanicIfTrue and d.PanicIfFalse. (#2757)
Should discourage people from writing code that does unnecessary work
to generate a msg every time that an error condition is checked. Fixes #2741
2016-11-03 11:43:57 -07:00
Ben Kalman bbfc27d7fe Revert "Remove demo-server and receipts code" (#2791) 2016-10-31 17:10:17 -07:00
Ben Kalman ba5e309c84 Remove demo-server and receipts code (#2790)
They're in attic now: https://github.com/attic-labs/attic
2016-10-31 17:08:18 -07:00
Ben Kalman 26391d9d57 Implement private databases for the demo server (#2772)
Private databases begin with "/p/" - for example, "/kalman" is not
private, but "/p/kalman" is private. They are not the same database.

The bulk of this work is the receipt infrastructure.

A receipt is form data that gives access to a database, encrypted using
secretbox. For example, "Database=/p/kalman&Date=12345678" might encrypt
to "SFH5bcIJ3_XgEbtmi_AdCKTItW20fl90czVl5_pF5PAXhNQ366U1yOpYGAjT".

* A new tool receiptkey generates random receipt (secretbox) keys.
* A new tool receipttool generates receipts for databases.
* demo-server has been updated to check for a receipt in the
  Authorization header to access private databases.

receipttool and demo-server must be given the same receipt key.
2016-10-31 10:58:33 -07:00
Dan Willhite 1cd34e0ebd Add Append() method to types.Path (#2783) 2016-10-29 12:37:50 -07:00
Erik Arvidsson 817af58a5b Add omitempty to Go marshal (#2784)
If you provide an omitempty tag and the Go value is the zero/empty value
then we do not include that field in the resulting Noms struct.

Towards #2376
2016-10-28 17:36:02 -07:00
Erik Arvidsson 2bd617ade8 Add delete field to structs (#2779) 2016-10-28 15:22:37 -07:00
cmasone-attic f2ca3d6e8e Add noms merge (#2768)
Add optional merging functionality to noms commit.
noms merge <database> <left-dataset-name> <right-dataset-name> <output-dataset-name>

The command above will look in the given Database for the two named
Datasets and, if possible, merge their HeadValue()s and commit the
result back to <output-dataset-name>.

Fixes #2535
2016-10-27 15:27:36 -07:00
cmasone-attic e954427903 Go: add heuristic merge option to db.Commit() (#2759)
This patch adds an optional MergePolicy field to CommitOptions. It's a
callback. If the caller sets it, then the commit code will look for a
common ancestor between the Dataset HEAD and the provided Commit. If
the caller-provided Commit descends from HEAD, then Commit proceeds as
normal.
If it does not, but there is a common ancestor, the code runs
merge.ThreeWay() on the values of the provided Commit, HEAD, and the
common ancestor, invoking the MergePolicy callback to resolve
conflicts. If merge succeeds, a merge Commit is created that descends
from both HEAD and the caller-provided Commit. This becomes the new
HEAD of the Dataset.

Fixes #2534
2016-10-27 11:52:46 -07:00
Vinicius Baggio Fuentes b0d51997fa go/marshal: allow any struct names while unmarshaling. (#2761) 2016-10-26 17:56:52 -07:00
cmasone-attic d8f172df09 Remove commit de-duping (#2749)
Now that we're going to put in real commit-merge logic, we
can take out the very-old hack that deduplicated identical
commits.

Fixes #2720
2016-10-24 10:12:16 -07:00
Erik Arvidsson 0eb940e50a First cut at noms migrate (#2594)
This iterates over all the values of the old version and creates new
values of the new version.

Closes #2428
Fixes #2272
2016-10-21 15:16:29 -07:00
Ben Kalman 007ba18987 Use the same cursor when initializing and finalizing the chunker (#2729)
Previously we would clone them from the original cursor, to (a) not
modify the original cursor, and (b) have initialization and finalization
not interfere with each other.

However, this isn't necessary and it just creates unnecessary churn. For
example, when we read-ahead, it would be wasteful to re-read the
read-head chunks from initialization.
2016-10-20 16:04:03 -07:00
Dan Willhite d94fb97788 Move diff package to top-level go directory (#2739)
Towards #609.
2016-10-20 10:19:57 -07:00
Dan Willhite e1e143a27a Extract print functionality from Diff function. (#2722)
The Diff function now returns Difference objects that can be
used in different contexts (e.g. print_diff)

Towards #609
2016-10-19 16:44:37 -07:00
Erik Arvidsson e164f8aeec Flow header after copyright (#2734)
This puts the flow header after the copyright header.

It also:
 * fixes the existing files to have valid headers
 * Makes sure the script can handle doctype
2016-10-19 11:36:48 -07:00
Erik Arvidsson b05a857d99 Handle NaN and Infinity in number encoding (#2731)
We were hitting iloops for these non finite numbers
2016-10-18 16:49:35 -07:00
cmasone-attic f22646b8c2 Go: Add more documentation for List merge. (#2724)
Modify the comment in merge/three_way.go to be accurate, add lengthy
discussion of List merge algorithm in three_way_list.go

Fixes #2717
2016-10-17 14:36:56 -07:00
Dan Willhite 60ec775acb Make AbsolutePath's private fields public. (#2704)
* Make AbsolutePath's private fields public.

Also, add String() method to PathSpec.

* Add godoc comments
2016-10-13 14:01:21 -07:00
cmasone-attic 3afdbd99c4 Enhance TestValidatingBatchingSinkPrepare (#2705)
The test now actually validates that processing the provided
hints populates the VBS' chunk cache
2016-10-13 13:34:59 -07:00
cmasone-attic b37b5cc61d Fix crash in handleWriteValue (#2696)
In some cases where the same chunk appears more than once in a given
writeValue request, the handleWriteValue code is able to recognize
this and skip re-decoding and re-hashing it. In that case an empty
result winds up percolating through the code, and I wasn't handling
this correctly. Fixed and added a unit test to catch this.

Fixes #2695
2016-10-12 08:49:12 -07:00
cmasone-attic c9c1bb9ff5 Add concurrency to use of ValidatingBatchingSink (#2684)
There are two places where ValidatingBatchingSink could be more
concurrent: Prepare(), where it's reading in hints, and Enqueue().

Making Prepare() handle many hints concurrently is easy because the
hints don't depend on one another, so that method now just spins up
a number of goroutines and runs them all at once.

Enqueue() is more complex, because while Chunk decoding and validation
of its hash can proceed concurrently, validating that a given Chunk is
'ref-complete' requires that the chunks in the writeValue payload all
be processed in order. So, this patch uses orderedparallel to run the
new Decode() method on chunks in parallel, but then return to serial
operation before calling the modified Enqueue() method.

Fixes #1935
2016-10-10 15:33:35 -07:00
Erik Arvidsson 239b02cfd5 Allow struct set to cause a type change (#2542)
This allows setting a field in a struct to a new type or to set a
non-existig field in a struct.

In JS this is done through the StructMirror.p.set and in Go this is
done through Struct Set.

Fixes #2181
2016-10-07 12:38:29 -07:00
Erik Arvidsson a88ac5822c JS: Add CommitOptions to commit method (#2677)
This allows setting the meta field when you commit.

This is a version change because the signature of Database commit
changed in a non backwards compatible way. It now takes an optional
third options object instead of an optional array.
2016-10-06 13:14:41 -07:00
Dan Willhite d3ca6c0b42 Fix panic in SizeCache. Fixes #2663 (#2666) 2016-10-04 12:48:04 -07:00
Eric Halpern 574bdd8483 Make config.Resolve methods public and make photo-index .nomsconfig aware (#2661) 2016-10-03 10:03:11 -07:00
zcstarr 40b28f94e5 Refactor Chunks and ChildValues API to work iteratively (#2599)
* Refactors Chunks and ChildValues API to be iterative change also
exposes WalkValues which replaces SomeP and AllP
2016-09-30 16:53:00 -07:00
Ben Kalman 9f5725bd27 Run url-fetch perf tests against a fresh database each time
The subsequent runs of url-fetch on jenkins are way faster, and this
appears to be because commiting is much faster on subsequent runs. The
perf tests now use a new database each time.
2016-09-29 12:49:37 -07:00
Eric Halpern d9715dba0e Support db aliases and default db for noms cli
This patch implements evolving support for configuring aliases and defaults for the noms cli (started with #2131)

For an introduction, please take a look at the sample code here: https://github.com/attic-labs/noms/blob/master/samples/cli/nomsconfig/README.md

Improvements include: 

 - All go samples now work with .nomsconfig
 - Absolute paths in ldb specs are now properly handled 
 - Add -v|--verbose flag to commands to debug expansion
 - Make default just another alias and change [default] section to [db.default]
 - Introduce the `.` shorthand to refer to a previously mentioned dataset/object
2016-09-27 22:21:32 -07:00
Ben Kalman 81673c2591 Add perf test for url-fetch 2016-09-27 16:52:54 -07:00
cmasone-attic c250406a0e LocalDatabase vends separate validating BatchStore (#2624)
This patch modifies LocalDatabase so that it no longer swaps out
its embedded ValueStore during Pull(). The reason it was doing this
is that Pull() injects chunks directly into a Database, without
doing any work on its own to ensure correctness. For LocalDatabase,
WriteValue() performs de-facto validation as it goes, so it does not
need this additional validation in the general case. To address the
former wtithout impacting the latter, we were making LocalDatabase
swap out its ValueStore() during Pull(), replacing it with one that
performs validation.

This led to inconsistencies, seen in issue #2598. Collections read
from the DB _before_ this swap could have weird behavior if they
were modified and written after this swap.

The new code just lazily creates a BatchStore for use during Pull().

Fixes #2598
2016-09-27 14:24:57 -07:00
Aaron Boodman 577c99ff38 Factor out datas.ReadAbsolutePaths() (#2623) 2016-09-27 14:21:54 -07:00
Aaron Boodman e52775f838 Refactor exit mockery into go/util/exit (#2622) 2016-09-27 13:51:27 -07:00
Ben Kalman 35d88dd3c6 Implement Blob.Concat and make NewBlob parallel
Blob.Concat is a simple use of the sequence concat code that List.Concat uses.
NewBlob uses Blob.Concat to construct a Blob in parallel.

Perf tests for parallel NewBlob write N temporary files then constructs a Blob
from them, so there is some I/O, but it appears to be mostly CPU bound.  NewBlob
doesn't get much more than 50% faster with any P >= 2.
2016-09-27 11:08:31 -07:00
Aaron Boodman 362a5630d9 Add photo-index: a simple photo indexer. For now only indexes by tag. (#2610)
Add photo-index: a simple photo indexer. For now only indexes by tag.

Will add indexing by face/geo in subsequent patches.
2016-09-27 10:50:37 -07:00
cmasone-attic 2e462b11a5 Make Database a mutable API that vends immutable Datasets (#2617)
Noms SDK users frequently shoot themselves in the foot because they're
holding onto an "old" Database object. That is, they have a Database
tucked away in some internal state, they call Commit() on it, and
don't replace the object in their internal state with the new Database
returned from Commit.

This PR changes the Database and Dataset Go API to be in line with the
proposal in Issue #2589. JS follows in a separate patch.
2016-09-26 12:18:14 -07:00
Ben Kalman 5dc8ae8388 Support -perf.run flag for perf tests, filters by regexp 2016-09-23 11:26:17 -07:00
Eric Halpern e3e9b29d2c Noms configuration for default and aliases (#2597)
* Implement noms cli configuration support

- Introduce .nomsconfig
- Supports a default db to use when no explicit db is given
- Supports defining db aliases to use as short hand for db urls
- See samples/cli/nomsconfig for more info

fix: #2131
2016-09-21 19:43:51 -07:00
Dan Willhite 1b256fa72a Implement GraphBuilder (#2548) 2016-09-20 16:04:28 -07:00
Eric Halpern 27cbfdd489 Fix noms-sync surprising quantity (#2531)
* Use sampling for a better bytes-written estimate for noms sync
* Confirmed that remaining overestimate of data written is consistent with leveldb stats and opened #2567 to track
2016-09-20 10:57:40 -07:00
Dan Willhite 1a7bfd0627 Cleanup Prefix and MaxLine writers (#2591)
These were previously intertwined into one writer that was
embedded in and only usable by the 'noms' command.
This commit separates them into to separate writers that
can be used independently or combined. I also moved them
into go/utils/writers so they can be used by other code.

The main impetus to do this was to fix Bug #2593.
2016-09-20 10:31:16 -07:00
Mike Gray f00157a728 Add unit tests for commit metadata (#2595) 2016-09-19 16:50:06 -04:00
Erik Arvidsson e3bea0f274 Tweak the display of the type of an empty Map (#2590)
Fixes #2247
Closes #2252
2016-09-16 17:48:47 -07:00