Commit Graph

25 Commits

Author SHA1 Message Date
Brad Fitzpatrick 66f0ddac0e pkg/client: fix directory upload deadlock, clean up HTTP handling
Unexports pkg/client.Client.TransportForConfig in the process.

Fixes camlistore/camlistore#662

Change-Id: Ifc2d6b0fee70d5db86654897d2d377b343b6d38b
2015-12-29 23:39:29 -08:00
mpl 12eddf9c19 vendor: go4.org/strutil go4.org/syncutil
They were internal packages (under pkg), which we are now moving to
go4.org, so we in turn need to vendor them in now.

Change-Id: I92224f731404d0bd4ca1c57492bed37cb3367ed4
2015-11-21 00:21:20 +01:00
mpl 8fc17c4d75 camput: add -contents_only flag
Allows to upload only the contents of a file, without any of its
attributes, i.e. the file JSON schema on top only has its camlitype,
and the file's parts, set.

Issue #42

Change-Id: I1d0ab8d7cff0f0350439553a37b618b941067c93
2015-04-08 18:21:56 +02:00
Brad Fitzpatrick 5458321511 campit: add -blobdir flag for serverless mode.
Fixes camlistore.org/issue/362

Change-Id: If4c75b649cc4cc62f3e7a0ab07c61b088560c3e4
2014-02-07 11:02:07 -08:00
Tamás Gulácsi e056081be1 add capctime flag to camput
I can recreate the file, set the modification time, but can't forge creation
time, thus cannot recreate the exact same uploaded file twice.
This change targets this problem.

As this is a very rarely used flag, this is enabled only if the CAMLI_DEBUG
environment variable is true - such as the other "gross" options
(statcache, sqlitecache...).

Change-Id: I99c7805898ed97883043de4e7dcec23a472e462c
2013-10-09 21:06:51 +02:00
Brad Fitzpatrick 59534f0ad6 Move pkg/gate to pkg/syncutil, to house more stuff.
Change-Id: I737458641a9de03da55ed627bfac10f3377a13aa
2013-09-12 16:04:10 +01:00
Brad Fitzpatrick ee4550bff4 camput: fix deadlock when uploading a large directory tree
The upload was constrained to have only 5 workers goroutines at a
time, but those goroutines could have been uploading directories and
blocked waiting for their dependent children, which never got to
upload if all 5 goroutines were uploading directories.

Now, allow an unlimited number of upload goroutines (see commit
058434449), but add a gate around things that allocate file
descriptors within the upload function.

This means that now we could have a ton of goroutines existing but
blocked on the gate, wasting ~4KB of memory each rather than the
relatively small amount of memory we used for the *node on the
container/list before.

Future CLs can reduce the memory usage and/or rewrite this.

Or maybe we forget to clean this up, but get smaller goroutine memory
usage in Go 1.3 as is being discussed.  It _is_ convenient to just
launch tons of goroutines and manage dependencies with channel
operations rather than managing the dependencies state and goroutine
scheduling in your own code, just to save some memory.

Change-Id: I43d9d7795e5df4d790d6086d18e4b4b99eaacbc8
2013-09-10 20:16:16 -07:00
Brad Fitzpatrick 02d38b07ca camput, client: move lot of camput's code into pkg/client
so cammount can use it.

Change-Id: I1bd513e6dfe6faab785c856abbd0d1337e978dd9
2013-07-11 16:46:23 +10:00
Brad Fitzpatrick 02e3c08947 schema: start of eliminating/unexporting schema.Superset and schema.Map
For now, unfortunately, there are even more types. The old ones will hopefully die soon.

Change-Id: I9d0bb1743c94a0de429175ef0b05ad6a964e07c0
2013-01-21 17:31:08 -08:00
mpl 77d044f4b7 schema: add FileTime to guess the file
creation time from potential file metadata.
camput: add the -exiftime option that allows
the use of the above for -filenodes and -vivify.

Fixes: http://code.google.com/p/camlistore/issues/detail?id=77

Change-Id: I05d1af3d875bb984e47e06775fd149e5ed0ed7b1
2013-01-10 17:43:05 +01:00
Brad Fitzpatrick fe13c7c712 move camput's statsTransport to httputil.StatsTransport, use it in camget too.
Change-Id: Iab48e32ccb8a99b8ec6b058061cff9a5b99e8712
2013-01-02 20:32:13 -08:00
Brad Fitzpatrick 6b466d0faa camput, client: push havecache down deeper, make it track blob sizes.
also, clean up some camput HTTP stuff.

Change-Id: I2762e5a1b83139132b5f660d306ed45584a7799a
2013-01-01 20:23:44 -08:00
Brad Fitzpatrick 8560c6d513 camput: move interfaces to their own file
Change-Id: I44276ecd1d3474efeb35308638a317605cedf05a
2012-12-28 09:49:18 -08:00
Brad Fitzpatrick 0b022b433a camput, schema, client: query server for dups before uploading, like the JavaScript UI.
Change-Id: Id12f78cf2a095adcfad90ca4c6416bb80b6e9b14
2012-12-22 22:48:21 -08:00
mpl 6cb7ecd644 camput: Preparation for vivify.
Refactor writeFileMapRolling so we can write the chunks,
then the top level contents, separately.

Change-Id: Ib56cd4b2aa295516fafbe7072ad5b352d1aaaa89
2012-12-23 01:15:29 +01:00
Brad Fitzpatrick 9abbbef45e camput: gofmt 2012-11-07 22:21:52 -06:00
Brad Fitzpatrick 9b35026497 camput: rename tinkerTransport to statsTransport 2012-11-07 21:00:22 -06:00
Brad Fitzpatrick 22495f8bfd schema: adjust rollsum splitting algorithm, make it the default
We might tweak the parameters yet, and I want to add a bunch more
tests, but this is a major relief for me.  I've been reluctant to
put too much data into my personal Camlistore instance until I
figured out how I wanted the file chunks to split.

This also simplifies (deletes) a fair bit of code.

Change-Id: I35c38cc5d39a8a43e3f62445434f8d7fd5de5d17
2012-10-29 02:03:05 +01:00
mpl 202c45a04a camput file:
This change introduces 2 features, illustrated by those examples:
1) camput file -filenodes *.jpg
This was not previously possible because -filenodes option only worked
with directories.
2) camput file -filenodes -tag 'nice pics' /media/foo/DCIM/
This was not previously possible because the -tag option could only be
used with the -permanode option.

Change-Id: I80ed95fdc819d359cacfe97ba3b7849b96e406f4
2012-10-22 19:25:56 +02:00
Brad Fitzpatrick 11eac8721e Convert more code to use schema.Map instead of map[string]interface{}
Change-Id: I285fd1b0e730ebd32069688a71cb992c43770ade
2012-08-22 03:47:38 +10:00
Brad Fitzpatrick b815a2b758 camput: add -filenodes option for per-file content-based planned permanodes
Change-Id: Ic03b990654d860e03b4cc710de92f7d40c392df8
2012-08-21 16:11:10 +10:00
Brad Fitzpatrick 51e88cac65 Support for "planned permanodes" in pkg/jsonsign, pkg/schema and cmd/camput.
A planned permanode involves setting the contents of the permanode
(instead of a random string) as well as the OpenPGP signing time so
the resultant bytes of the blob (and thus its blobref) is deterministic.

This allows multiple independent devices (my laptops) to create the
same permanodes for the same files (photos backed up from my phone)
when offline (airplane) and then when they sync later, still only have
one permanode per unique file.  This means that tagging and other
metadata applied to permanodes on one laptop merge cleanly with
metadata from the other.
2012-07-28 16:32:31 -07:00
Brad Fitzpatrick 8c293e34b6 Per Go initialism style, rename Json to JSON 2012-07-28 15:42:56 -07:00
Brad Fitzpatrick da42bdf523 camput: more code movement
Change-Id: I775096c39b5c9671a3c054b7d02562cfa787f0a1
2012-04-21 07:22:32 -07:00
Brad Fitzpatrick e6e26f2017 camput: move common uploader stuff to uploader.go
Change-Id: I6137a945f89f4a0603189a5fc04b49a570a3403b
2012-04-21 07:14:57 -07:00