Commit graph

356 commits

Author SHA1 Message Date
kul
e006fbcbb0 Expose exception to user as :throwable (@kul) 2014-11-04 12:33:19 +07:00
Peter Taoussanis
152fec95e0 Fix ex-info call args (@kul) 2014-11-04 12:31:41 +07:00
Peter Taoussanis
4d1a374c8f Typehint typo 2014-11-04 12:31:41 +07:00
Peter Taoussanis
7925982939 Print warning when replacing a custom type reader 2014-08-27 19:20:23 +07:00
Peter Taoussanis
13cdf06a60 Make coerce-custom-type-id private 2014-08-27 19:20:23 +07:00
Peter Taoussanis
9e60939848 EXPERIMENTAL: Support keyword-id extensions (#50) 2014-07-06 13:25:08 +07:00
Peter Taoussanis
70dd8f637c Lock-free memoized type test 2014-04-29 23:10:26 +07:00
Peter Taoussanis
06cf8aefd6 Update benchmarks 2014-04-29 23:10:26 +07:00
Peter Taoussanis
20b1c2b1d2 Encode compression type in Nippy header, major refactor/housekeeping
Housekeeping includes:
  * Importing useful encryption+compression stuff into primary ns
    for lib consumers.
  * Promoting a number of things from Alpha status.
  * Exceptions are now all `ex-info`s.
  * Simplification of `thaw` API: Nippy v1 support is now automatic
    & configuration-free (performance impact in most cases is negligible).
2014-04-29 23:10:26 +07:00
Peter Taoussanis
b7a454a9c8 EXPERIMENTAL: Make LZ4 the default Nippy compressor (back-compatible for header'ed data) 2014-04-29 23:10:26 +07:00
Peter Taoussanis
5b9358acf9 LZ4: use fast decompressor 2014-04-29 23:10:26 +07:00
Peter Taoussanis
a6aba2c92a Add experimental LZ4 compressors 2014-04-29 23:10:26 +07:00
Peter Taoussanis
3c8661a094 [#48] Fix freeze/thaw identity on empty lazy seqs 2014-04-29 23:08:00 +07:00
Peter Taoussanis
7d84099074 IMPORTANT FIX: small strings weren't getting a proper UTF-8 encoding (xkihzew)
`(.getBytes <string>)` was being used here instead of
`(.getBytes <string> "UTF-8")` as is correct and done elsewhere.

This means that small UTF-8 strings may have been incorrectly stored
in environments where UTF-8 is not the default JVM character encoding.

Bug was introduced in Nippy v2.6.0, released 9 days ago (2014 Mar 30).

*********************************************************************
Please check for possible errors in Unicode text written using Nippy
v2.6.0 if your JVM uses an alternative character encoding by default
*********************************************************************

Really sorry about this, not sure how this slipped in.

Thanks to @xkihzew for the bug report.
2014-04-08 17:04:53 +07:00
Peter Taoussanis
6058ac7b54 Fix freezable? fn name typo (mbossenbroek) 2014-03-18 14:23:15 +07:00
Peter Taoussanis
54389cc3a0 NB migrate utils stuff to encore lib 2014-02-23 19:15:55 +07:00
Peter Taoussanis
107cc53f65 Check freezable? against atom type 2014-02-16 19:09:02 +07:00
Peter Taoussanis
42b366a432 Experimental freezable? fn 2014-02-16 18:49:45 +07:00
Peter Taoussanis
0b56746a61 Mod (experimental) Compressable-LZMA2 to use new :skip-header? mode, add :headerless-meta assertion 2014-02-09 18:29:16 +07:00
Peter Taoussanis
e2847f348f [#38]: Distinguish between BigInt/BigInteger on thawing (mlacorte) 2014-01-30 16:16:50 +07:00
Peter Taoussanis
3f982e78cd Make public some macros useful for custom extensions, add experimental compact-long type 2014-01-23 23:13:21 +07:00
Peter Taoussanis
cfa0969bea Optimize some small, common types 2014-01-22 16:50:53 +07:00
Peter Taoussanis
1edde2d53b Revert "New compact byte representation, backwards-compatible"
This reverts commit 93ce024f58.
2014-01-22 15:38:32 +07:00
Peter Taoussanis
93ce024f58 New compact byte representation, backwards-compatible 2014-01-22 15:38:22 +07:00
Peter Taoussanis
1d2daf206b Clean up new DataInput/Output API 2014-01-22 15:01:12 +07:00
Peter Taoussanis
87fcd3a9c6 Generalise to allow serialising from/to any DataInput/DataOutput. (cmf) 2014-01-22 14:56:07 +07:00
Peter Taoussanis
b413adc62a Make id defs easily IDE-collapsable 2014-01-22 14:56:07 +07:00
Peter Taoussanis
5690a9611e Improve support for headerless freezing (docs, error msgs, etc.) 2014-01-22 14:01:27 +07:00
Peter Taoussanis
d8bbbbdb32 Add Fressian benchmark 2014-01-21 14:55:51 +07:00
Peter Taoussanis
42f45a0a06 Bench :fast before :encrypted 2014-01-21 14:55:50 +07:00
Peter Taoussanis
42950ec24a Add stress-data-comparable, stress-data-benchable 2014-01-21 14:55:50 +07:00
Peter Taoussanis
7e1b1bb6b4 Deprecate :legacy-mode, add :skip-header? mode 2014-01-21 14:55:50 +07:00
Peter Taoussanis
32e4e82091 BREAKING: Clean up (experimental) Compressable-LZMA2 2014-01-21 12:56:36 +07:00
Peter Taoussanis
c11d4e36a8 hk 2014-01-21 12:47:46 +07:00
Peter Taoussanis
d112ecc395 Revert "Experimental: write-compact-int for _all_ int-like writing"
This reverts commit 93afb3820e.
2014-01-21 12:46:35 +07:00
Peter Taoussanis
93afb3820e Experimental: write-compact-int for _all_ int-like writing 2014-01-21 12:46:23 +07:00
Peter Taoussanis
a5c2f39865 Revert "wip: experimenting with common number optimizations"
This reverts commit 307a265447.
2014-01-20 15:12:18 +07:00
Peter Taoussanis
307a265447 wip: experimenting with common number optimizations 2014-01-20 14:44:32 +07:00
Peter Taoussanis
f8239531da v2.5.2 2013-12-07 16:49:34 +07:00
Peter Taoussanis
5ea4af7356 Further work on freezer fallback reliability 2013-12-07 16:44:53 +07:00
Peter Taoussanis
3093eae322 Experimental: add freeze-fallback-as-str fn 2013-12-03 16:46:30 +07:00
Peter Taoussanis
43c85059d7 Throw on freeze (rather than thaw) when trying to freeze an unreadable object with pr-str 2013-12-03 16:22:52 +07:00
Peter Taoussanis
1a7812522c Experimental: add inspect-ba util for inspecting possibly-frozen data 2013-12-03 16:22:51 +07:00
Peter Taoussanis
730b8774c4 Utils: housekeeping, update bench, memoized 2013-11-08 21:45:28 +07:00
Peter Taoussanis
0fd9275e37 Experimental compressable-lzma2: fix thaw bug 2013-11-07 12:47:36 +07:00
Peter Taoussanis
da1622f271 Experimental: add Compressable-LZMA2 type & (replaceable) de/serializer 2013-11-06 13:58:55 +07:00
Peter Taoussanis
7e7975910a tools: fix thaw arg destructuring & opt merging 2013-11-05 22:41:51 +07:00
Peter Taoussanis
84e336fe65 Make byte transform on seqs 1-to-1, re-add ISeq as a fallback implementation 2013-10-31 13:29:34 +07:00
Peter Taoussanis
aa78ad6a0b Rename test type: :coll->:lazy-seq 2013-10-31 13:16:26 +07:00
Peter Taoussanis
b1dab1dc4b Add debug-mode flag 2013-10-31 13:15:22 +07:00
Peter Taoussanis
8f8ab99e95 Add some Serializable tests (exceptions) 2013-10-24 13:55:47 +07:00
Peter Taoussanis
9448d2b3ce Add Java's Serializable as a pre-Reader fallback mechanism 2013-10-24 13:55:47 +07:00
Peter Taoussanis
c58bf97af7 Move Record test into stress data 2013-10-24 13:55:47 +07:00
Peter Taoussanis
5c48ba8e26 Reduce amount of (unnecessary) freeze procotol extensions to interfaces
These can cause confusing, inconsistent behaviour when the protocol dispatch
needs to choose between multiple implementations:
Ref. https://groups.google.com/forum/#!topic/clojure-dev/-zoLA78--Mo

The approach as of this commit is more robust and allows more flexibility in
extension.
2013-10-24 13:55:47 +07:00
Peter Taoussanis
75dd0d9040 Remove tagged literal labels for uuid & date (both have been baked-in for some time) 2013-10-24 13:55:47 +07:00
Peter Taoussanis
a122e62fe0 Reposition freeze-to-stream! fn for clarity 2013-10-24 13:55:47 +07:00
Peter Taoussanis
26f32c7a95 Housekeeping 2013-10-24 13:34:38 +07:00
Peter Taoussanis
33eee786be Lower default LZMA2 compression level -> 0 (much better perf @ ~same ratio) 2013-10-19 18:17:47 +07:00
Peter Taoussanis
3879cf4d62 Add experimental LZMA2 compressor for higher compression ratios than Snappy 2013-10-19 15:37:38 +07:00
Peter Taoussanis
512aca32aa Housekeeping 2013-10-19 13:51:58 +07:00
Peter Taoussanis
f6d5ebd862 Revert "add fast-path encoding for long, doubles, keywords, and strings"
This reverts commit a92c493375.

As per https://github.com/ptaoussanis/nippy/pull/31, tests appear to be
inconclusive about the effetcs of this commit. Candidate for future
reconsideration.
2013-10-17 17:44:54 +07:00
Peter Taoussanis
ae0a2e7907 Update benchmarks 2013-10-12 16:45:19 +07:00
Zach Tellman
a92c493375 add fast-path encoding for long, doubles, keywords, and strings 2013-10-12 16:45:19 +07:00
Zach Tellman
5492c1ea0f don't iterate twice over uncounted seqs, and use explicit key/val accessors for kv-collections, appears to give ~25% improvement in 'freeze' 2013-10-12 16:45:19 +07:00
Peter Taoussanis
1b27c1be7a v2.2.0 2013-10-03 21:21:59 +07:00
Peter Taoussanis
49fbbf270f Deps 2013-09-25 16:11:22 +07:00
Peter Taoussanis
6cce8a2857 Housekeeping: docstring typo 2013-08-08 14:22:46 +07:00
Peter Taoussanis
2061dd0868 Add & _ arg for thaw-from-stream! 2013-08-07 18:43:04 +07:00
Peter Taoussanis
d15a12af76 Update benchmarks 2013-08-07 18:29:36 +07:00
Peter Taoussanis
08f2cb1273 Use *data-readers* value for edn/read-string 2013-08-07 17:52:58 +07:00
Peter Taoussanis
d3120f0246 Remove :print-dup? option (no longer useful since switch to edn/read-string) 2013-08-07 17:52:00 +07:00
Peter Taoussanis
efa56eca73 Use tools.reader.edn in benchmarks 2013-08-07 17:37:22 +07:00
Peter Taoussanis
05907403dc Revert 8e4cc07 (unnecessary, slower) 2013-08-07 17:37:22 +07:00
Peter Taoussanis
3addeed195 Swap IPersistentMap -> APersistentMap 2013-08-07 17:37:22 +07:00
Peter Taoussanis
8e1d649bcb Swap IPersistentCollection->ISeq (the former seems to interfere with IRecord dispatch) 2013-08-07 17:37:22 +07:00
Peter Taoussanis
a76734a25a Housekeeping, add test for records with custom extension 2013-08-07 17:30:13 +07:00
James Reeves
5442216343 Add a fast serialization for UUID objects 2013-08-07 10:21:10 +01:00
James Reeves
8b13ff68b9 Add a fast serialization for Date objects 2013-08-07 10:19:53 +01:00
Peter Taoussanis
e48ccb4c45 Merge pull request #26 from weavejester/fast-records
Fast serialization for records
2013-08-06 23:54:33 -07:00
James Reeves
6ab00df42c Add fast serialization for records 2013-08-06 17:56:43 +01:00
James Reeves
6caff3503e Remove read-eval option made unnecessary by EDN reader 2013-08-06 16:59:04 +01:00
James Reeves
6024a9cc31 Replace unsafe Clojure reader with safe EDN reader 2013-08-06 16:45:30 +01:00
Peter Taoussanis
c69bb0ec5f Perf: only set bindings when necessary 2013-08-02 21:28:51 +07:00
Peter Taoussanis
4071d0f3ec Switch to simpler extend-freeze, extend-thaw custom type API (ALPHA) 2013-08-02 21:28:51 +07:00
Peter Taoussanis
c2a964932c Add custom-freezer macro for easier Freezable extension 2013-08-02 15:04:11 +07:00
Peter Taoussanis
99091b0a32 Add support for custom thaw readers 2013-07-29 16:43:29 +07:00
Peter Taoussanis
8e4cc072e3 Move Reader fallback out of Freezable protocol to make protocol extensible 2013-07-29 15:58:51 +07:00
Peter Taoussanis
69611657c7 Expose low-level fns: freeze-to-stream!, thaw-from-stream! 2013-07-29 15:57:36 +07:00
Peter Taoussanis
a8b1686a54 Make head-meta ^:const 2013-07-25 15:41:13 +07:00
Peter Taoussanis
93ef118e80 Housekeeping 2013-07-06 15:55:59 +07:00
Peter Taoussanis
4adb7fa376 Housekeeping 2013-06-24 15:22:54 +07:00
Peter Taoussanis
8a33f15801 Temporarily disable grease dep 2013-06-22 18:38:16 +07:00
Max Penet
fb09ebb89b try grease 0.2.1 2013-06-18 18:32:54 +02:00
Peter Taoussanis
ac3901f626 Reverse use of fast io-streams
Seemed to be causing issues in multi-JVM auto-tests. The added perf. benefit was
minor for Nippy's use case (~2-3%) - so this isn't an urgent change. Will
re-examine again later.
2013-06-18 14:08:22 +07:00
Peter Taoussanis
f7a96bd37f Housekeeping 2013-06-18 13:48:34 +07:00
Peter Taoussanis
9a2b0a068b thaw API should throw on first non-legacy error 2013-06-18 09:49:42 +07:00
Peter Taoussanis
4326da0ae5 Add tooling API 2013-06-17 23:20:17 +07:00
Peter Taoussanis
c8c0b99ae2 Update benchmarks (2.0.0-alpha6 w/fast io-streams) 2013-06-17 15:12:18 +07:00
Peter Taoussanis
3e6b12ac11 Housekeeping for 67633d5 2013-06-17 13:54:45 +07:00
Max Penet
67633d5fd6 try non sync version of byte-array iostreams 2013-06-16 22:27:22 +02:00
Peter Taoussanis
559c73abef Fix core dump issue (important), simplify API
PROBLEM: :legacy-mode :auto/true thawing was resulting in JVM core
dumps when attempting to use Snappy to decompress encrypted data.

CAUSE: The org.iq80.snappy implementation seems to choke on the
random IV byte data being generated by the AES128 encrypter. This
may or may not be a bug (still awaiting feedback from lib's authors).

SOLUTION: We're only susceptible to this issue when trying to
decompress data that is: a) encrypted, b) being thawed in legacy mode.
In particular, we're _not_ susceptible to this issue when thawing
in non-legacy mode because in that case we have a header explicitly
warning us that the data is encrypted.

An obvious work-around, therefore, is just to disable decryption when
attempting to thaw legacy-mode data. In practice this isn't a problem
because older versions of Nippy didn't support encryption anyway.
2013-06-16 19:33:23 +07:00
Peter Taoussanis
e351fdfc43 Rename default compressor, encryptor 2013-06-16 17:55:20 +07:00
Peter Taoussanis
a2376184dc Auto AES128 block size 2013-06-16 16:20:55 +07:00
Peter Taoussanis
5877dc4df0 Update benchmarks (2.0.0-alpha6) 2013-06-16 14:06:36 +07:00
Peter Taoussanis
4ec950417c Rewrite all stream helpers as macros (performance) 2013-06-16 13:23:32 +07:00
Peter Taoussanis
26ad8dd252 Reorganize low-level stream fns (prepping for perf work) 2013-06-16 13:23:32 +07:00
Peter Taoussanis
c5d039b183 Make coll-thaw, coll-thaw-kvs macros (performance) 2013-06-16 13:23:32 +07:00
Peter Taoussanis
9c207cd6af Housekeeping 2013-06-16 13:23:32 +07:00
Max Penet
63765c8510 move thaw exception handler outside of thaw (it's recreated everytime the function gets called now) 2013-06-16 11:58:58 +07:00
Max Penet
e4cde95d54 repeatedly-into as a macro 2013-06-16 11:47:56 +07:00
Peter Taoussanis
823f2c3c46 Housekeeping 2013-06-15 20:41:43 +07:00
Peter Taoussanis
c42457a48c Housekeeping, new keyword implementation (mpenet) 2013-06-14 17:52:25 +07:00
Peter Taoussanis
f706a51a4d Rework v2 header format 2013-06-14 17:49:53 +07:00
Peter Taoussanis
15dd24ac06 Add :auto legacy mode for _full_, transparent backwards-compatibility 2013-06-13 19:01:57 +07:00
Peter Taoussanis
4bc6dde12b Update benchmarks (2.0.0-alpha1) 2013-06-13 16:41:54 +07:00
Peter Taoussanis
8d48ec9d75 NB: Simpler, more flexible API (backwards-compatible) 2013-06-13 16:41:54 +07:00
Peter Taoussanis
284d11c660 Prep for pluggable compression+encryption 2013-06-13 16:41:54 +07:00
Peter Taoussanis
5a398efd9f Rename repeatedly* -> repeatedly-into 2013-06-13 16:41:54 +07:00
Peter Taoussanis
bfc16ce3ab Optimize collection creation (much faster) 2013-06-13 16:41:54 +07:00
Peter Taoussanis
613c77b8a1 Further prep for new API, mark freeze-to-bytes and thaw-from-bytes as deprecated 2013-06-13 11:45:45 +07:00
Peter Taoussanis
9734e882bb Swap repeatedly -> utils/repeatedly* (faster) 2013-06-13 11:45:45 +07:00
Peter Taoussanis
7705c42142 Housekeeping prep for new API 2013-06-13 11:45:45 +07:00
Peter Taoussanis
ac380eb621 Mark freeze-to-stream! and thaw-from-stream! as private 2013-06-13 11:45:45 +07:00
Peter Taoussanis
da077c6a54 Drop Clojure 1.3 support 2013-06-13 11:45:45 +07:00
Peter Taoussanis
6fe433b579 Update tests, migrate to Expectations lib 2013-06-13 11:45:44 +07:00
Peter Taoussanis
ab3209f2dc Housekeeping 2013-06-13 01:20:18 +07:00
Peter Taoussanis
9a38a12e11 Add helpful thaw exceptions 2013-06-12 15:39:30 +07:00
Peter Taoussanis
611ab56b74 Housekeeping 2013-06-12 15:28:49 +07:00
Peter Taoussanis
4ac2a34d7a Crypto: simplify design, add auto salting
Have decided to simplify the API even further and bring configuration down to
essentially one decision: do you want auto salting, or key caching?
2013-06-12 15:09:17 +07:00
Peter Taoussanis
bea3f5e84e Fix crypto encryption ba-concat order 2013-06-12 02:04:36 +07:00
Peter Taoussanis
2dcad8f4bd Housekeeping 2013-06-11 21:15:41 +07:00
Peter Taoussanis
3ecbc420cd Add basic crypto support (alpha) 2013-06-11 21:10:08 +07:00
Peter Taoussanis
749228dde5 Update benchmarks 2013-06-03 16:42:49 +07:00
Max Penet
8305f30499 replace partial with an anonymous fn (performance optimisation) 2013-06-02 17:54:44 +02:00
Peter Taoussanis
b91ab8e031 Fix OOM issue for large lists 2013-04-14 14:47:09 +07:00
Peter Taoussanis
37a2a80a98 Add support for sorted-set and sorted-map types 2013-04-14 14:44:06 +07:00
Peter Taoussanis
eb9e828647 Bump dependency (snappy 0.3), simplify utils/compress-bytes 2013-02-05 20:24:14 +07:00
Peter Taoussanis
3e178dabf3 EXPERIMENTAL: Swap Snappy implementation org.xerial.snappy/snappy-java -> org.iq80.snappy/snappy
This (native Java) implementation appears to be about as fast as
the old (JNI) implementation, but has better support across more platforms.

Going to evaluate stability on this branch for possible later merging into master.
2013-01-20 19:39:08 +07:00
Peter Taoussanis
fdff6aacd1 Add autobench to tests 2013-01-20 19:37:08 +07:00
Peter Taoussanis
f056abc0e8 Add optional print-dup? arg to freeze-to-stream! (default to true) 2013-01-20 19:24:12 +07:00
Peter Taoussanis
03684b6d28 Housekeeping 2013-01-20 19:14:59 +07:00
Peter Taoussanis
f5b2b14320 Housekeeping 2012-12-05 13:47:54 +07:00
Peter Taoussanis
c2c46167ec Swap hash-map thaw implementation for perf & to avoid OOM errors
Thanks to moonranger for pointing out the OOM issue.
2012-12-04 13:17:50 +07:00
Peter Taoussanis
f20da14cb4 Stop writing version headers
It's slow, and in practice doesn't offer anything better than deprecated per-type IDs.
2012-08-15 23:24:44 +07:00
Peter Taoussanis
8bec62767d BREAKING (minor): Change freeze-to-bytes, thaw-from-bytes API when not using defaults.
Breaks only for users that were overriding `freeze-to-bytes` or `thaw-from-bytes` defaults to disable
compression.

Changed to map-based config to allow extra control (like :read-eval? as suggested by Luc Préfontaine).
This change will also allow further additions in future without the need to break the API again.
2012-07-24 14:42:19 +07:00
Peter Taoussanis
1bcab7ede2 Add version comparison stuff to utils. Now test tagged-literals when Clojure version is sufficient. 2012-07-21 18:23:48 +07:00
Peter Taoussanis
ba99940784 Fixed 'deprecated as of' comments. 2012-07-21 01:56:30 +07:00
Peter Taoussanis
780e06c693 Support strings (incl. reader strings) of length > 64K.
Luc Préfontaine kindly pointed out that `.writeUTF` and `.readUTF` have a maximum length of
64k. This commit switches to a custom integer-length prefix for strings and reader types to
boost their max length. Keywords are unchanged.

Old string and reader type IDs are now deprecated but will continue to be supported for
thawing.
2012-07-21 01:47:54 +07:00
Peter Taoussanis
8bc790cf06 Improve performance: remove unnecessary reflection.
`write-as-bytes!` was unnecessarily general. Renamed as type-hinted `write-biginteger!`.
Improves write performance of all types that relied on `write-as-bytes`: bigints, bigdecs,
rational.
2012-07-21 01:12:45 +07:00
Peter Taoussanis
0b3667c0e2 Simplified benchmarking. 2012-07-14 14:28:02 +07:00
Peter Taoussanis
1e92263f36 Housekeeping. 2012-07-08 18:34:47 +07:00
Peter Taoussanis
cddd2eef13 Added support for namespaced keywords. 2012-07-08 13:01:00 +07:00
Peter Taoussanis
8f9bce289b Add notes about tagged literals. 2012-07-08 12:49:22 +07:00
Peter Taoussanis
07e542dc52 Housekeeping. 2012-07-07 20:17:16 +07:00
Peter Taoussanis
146f82e079 Initial source, tests, benchmarks. 2012-07-07 19:03:44 +07:00
Peter Taoussanis
53332644bb Initial structure commit. 2012-07-07 00:29:41 +07:00