Commit Graph

25 Commits

Author SHA1 Message Date
P. C. Shyamshankar
3cc0b3e054 Add 1-ary and 2-ary function memoization machinery
Summary:
This revision generalizes the existing memoization framework to 1-ary and 2-ary
functions (namely functions of type (a -> GenHaxl u b) and (a -> b _> GenHaxl u c)).

For every support arity (currently 0, 1, and 2), a family of functions {
newMemoWithX, prepareMemoX and runMemoX } are provided. newMemo itself is
generic across all arities.

Reviewed By: simonmar

Differential Revision: D3555791

fbshipit-source-id: 010a9889d42327607c8b03a5f7a609ee0c70de49
2016-07-25 06:16:28 -07:00
P. C. Shyamshankar
bff7b643f5 Refactor cachedComputation to use newMemo/runMemo.
Summary:
This revision refactors cachedComputation to only contain logic relevant to
where the request-scope memo lives; memo creation and running logic is delegated
to newMemo(with) and runMemo.

Comments in cachedComputation have been moved over to newMemo/runMemo, and a
benchmark for cachedComputation has been added to monadbench. Surprisingly,
performance might have improved, albeit very slightly.

Reviewed By: simonmar

Differential Revision: D3514791

fbshipit-source-id: b2f0627824adc79b766e4f4e28c4af957ff00a00
2016-07-06 03:31:25 -07:00
P. C. Shyamshankar
7cd98c4076 Add createMemo/updateMemo helpers, with monadbench test-case.
Summary:
This diff adds the createMemo and updateMemo helper functions, which abstract
the memoization reference management logic of cachedComputation. This separates
the work of *how* a memoized computation is created/updated, from *where* the
memo reference lives, allowing the same code to be used to manage request-scope
and feature-scope memos simultaneously.

A refactor of cachedComputation to use this abstraction is forthcoming.

Reviewed By: simonmar

Differential Revision: D3492803

fbshipit-source-id: 9dadd3860d5bec3bf776eef7c1bd610c25283729
2016-07-01 08:31:28 -07:00
P. C. Shyamshankar
a7b3552d5c Add memoization benchmarks to monadbench
Summary:
Memoized operations were not represented in monadbench, this diff fixes that. Three tests are included:

1. Unmemoized computation, repeated N times.
2. Memoized computation, repeated N times.
3. Memoized computation, repeated N times **under different memo keys**

Reviewed By: simonmar

Differential Revision: D3444238

fbshipit-source-id: b2df534232acd5c02f9f6aea030c55d5cc846eb0
2016-06-20 02:46:24 -07:00
Gergely Szilvasy
1893551564 Unbreak cabal test
Summary: Some tests were failing, but we ignored the test failures by not checking the return value from the test runner. This patch fixes both the test runner and the tests.

Reviewed By: watashi

Differential Revision: D3379609

fbshipit-source-id: 0a1278879faa5beb0f9779ddfaa622cdbf05a73f
2016-06-04 15:31:43 -07:00
Andrew Farmer
b5a305b5c1 Count rounds/fetches for profiling labels.
Summary:
This collects the highest round in which a label adds a fetch, as well as
number of fetches per label per datasource. It reports these, along with
aggregated values with scuba sample of profiling data.

Aggregation for number of rounds is the maximum round of label or any of
label's children. Aggregation for number of fetches is sum.

Reviewed By: simonmar

Differential Revision: D3316018

fbshipit-source-id: 152690c7b8811d22f566437675c943f755029528
2016-06-04 15:20:42 -07:00
Gergely Szilvasy
19b024634b resolve test runner conflict
Summary: We use a FB-specific test runner in fbcode. As a result currently tests/Main.hs is different on github to allow 'cabal test' to pass. This diff resolves the difference by creating a common list of tests and two separate entry points for running the tests: tests/Main.hs for internal use, and tests/TestMain.hs for github. tests/Main.hs will (eventually) be excluded from the public sources.

Reviewed By: simonmar

Differential Revision: D3371609

fbshipit-source-id: 46a7382df814687230db43136acd496d0c5ebca9
2016-06-02 06:44:43 -07:00
Noam Zilberstein
bab7a57f5c remove extra comment
Summary: someone added this useless comment. I'm going to delete it

Reviewed By: niteria, simonmar

Differential Revision: D3327964

fbshipit-source-id: 15c52b9497d70b360aeddf56fa4a402496949e43
2016-05-31 06:25:54 -07:00
Noam Zilberstein
2ec5ba1e21 kick sandcastle build
Summary: ignore this diff. just trying to kick a sandcastle build

Reviewed By: niteria

Differential Revision: D3327658

fbshipit-source-id: a774f53e54db5e7a29a3a6152dcf7fb2d62db4b0
2016-05-31 06:25:54 -07:00
Simon Marlow
f08a9d8803 Add support for disabling the cache
Summary:
Some people want to use Haxl for large batch jobs or long-running
computations.  For these use-cases, caching everything is not
practical, but we still want the batching behaviour that Haxl provides.

The new Flag field, caching, controls whether caching is enabled or
not.  If not, we discard the cache after each round.

Reviewed By: niteria

Differential Revision: D3310266

fbshipit-source-id: 3fb707f77075dd42410bd50fc7465b18b216804e
2016-05-31 06:25:54 -07:00
Simon Marlow
9744e9e122 Fix profile test
Summary:
The value was too sensitive, it was different in the dbg way, and even
when running individual tests vs. all tests.

Reviewed By: codemiller

Differential Revision: D3310273

fbshipit-source-id: b15f81350f389888189409e7195486dc218f2573
2016-05-31 06:25:54 -07:00
Andrew Farmer
9737719b7f Subtract nested allocations from lightweight profiling
Summary:
Does three things:

1. Fix order of arguments to `updEntry` to update the existing entry, instead of replacing it with 2*new.
2. Subtract nested allocations from parent.
3. Call setAllocationCounter after recording profiling data, so profiling overhead doesn't count towards the parent or the allocation limit.

Reviewed By: simonmar

Differential Revision: D3235413

fbshipit-source-id: a9f287399516fc90600b15a1524592f9c3b0674b
2016-05-31 04:05:05 -07:00
Jake Lengyel
c4ca10b6ea Add (de)serialization functions to most datasources
Summary: Add serialization and deserialization functions to non-risk datasources that don't require special treatment (like CacheClient, etc), for use with D2628780

Reviewed By: simonmar

Differential Revision: D2645436

fbshipit-source-id: 2777dbfbb11528bc079e2e82e88ebbdc880a8914
2016-05-31 01:20:38 -07:00
Gergely Szilvasy
3e78756034 Remove TARGETS files 2016-05-27 08:22:40 -07:00
Simon Marlow
037de9c594 Overhaul docs; bump to 0.3.0.0; add changelog
Summary: Tidy everything up in preparation for a Hackage reelase

Test Plan: cabal test; unit tests

Reviewed By: kjm@fb.com

Subscribers: anfarmer, kjm, jlengyel, watashi, smarlow, akr, bnitka, jcoens

FB internal diff: D2516904

Signature: t1:2516904:1444297290:52077660599ab126ec8a3e4530808db7c15d1876
2015-10-12 06:23:49 -07:00
Simon Marlow
2d37f76bd4 Add a benchmark for basic Haxl monad patterns
Summary:
I'm using this to test variants of the monad.  In particular, the
current monad displays O(n^2) performance with the seql version of
this benchmark. This is a well-studied problem, see for example

"Reflection without remorse: revealing a hidden sequence to speed up
monadic reflection" (van der Ploeg / Kiselyov, Haskell '14)

Test Plan:
Built it and ran it a few times
unit tests still work

Reviewed By: bnitka@fb.com

Subscribers: ldbrandy, kjm, jlengyel, memo, watashi, smarlow, akr, bnitka, jcoens

FB internal diff: D2419419

Signature: t1:2419419:1441640727:9f5f82212c829fcbf2e8c063d4dbd0db495b0ba2
2015-10-07 01:16:22 -07:00
Simon Marlow
dea379f271 (>>) should be implemented as (*>)
Test Plan: new unit test

Reviewed By: akr@fb.com

Subscribers: ldbrandy, memo, watashi, smarlow, akr, bnitka, jcoens

FB internal diff: D2146859

Signature: t1:2146859:1434027756:806eb07efc3282857b7d2400c4b10b949495b476
2015-10-07 01:06:49 -07:00
Simon Marlow
dfd8a4655e A haxl test for ApplicativeDo
Summary:
Test that the ApplicativeDo extension batches things correctly in the
Haxl monad.

Test Plan: beholdunittests

Reviewed By: bnitka@fb.com

Subscribers: ldbrandy, memo, watashi, smarlow, akr, bnitka, jcoens

FB internal diff: D2039149

Tasks: 5504687

Signature: t1:2039149:1430501733:98fd1cf0f69663d6db3b07c3aed6e261ae9884d6
2015-10-07 01:06:35 -07:00
Jake Lengyel
9d8fe2c6aa Move memo to haxl/core
Summary: Move the functionality of memo to haxl/core, while retaining a Haxl wrapper in SI.

Test Plan: fbconfig -r sigma/haxl && fbmake runtests_opt

Reviewed By: smarlow@fb.com

Subscribers: ldbrandy, memo, watashi, smarlow, akr, bnitka, jcoens, wmay

FB internal diff: D1996371

Tasks: 4601157

Signature: t1:1996371:1429180518:6759e4dc2444bd942cde145d9de945430b3cba7e
2015-10-07 00:57:48 -07:00
Simon Marlow
c67b7af2e0 Don't drop async exceptions (e.g. AllocationLimitExceeded)
Summary:
Turning IO monad exceptions into Haxl monad exceptions can result in the
IO monad exception being lost, which is what was happening to our
AllocationLimitExceeded exceptions.  See the comment with
rethrowAsyncExceptions for more details.

See also D1870627

Test Plan:
P19741543 is a request that blows the alloc limit but wasn't being
caught before.

Reviewed By: akr@fb.com

Subscribers: ldbrandy, memo, watashi, smarlow, akr, bnitka, jcoens

FB internal diff: D1870631

Tasks: 6240444

Signature: t1:1870631:1424867073:d03bd0368ee968cecbcc5a0f654772b6f0eaf147
2015-03-11 12:41:38 -07:00
Zejun Wu
668a8adc2e Collect time in each data sources in each round
Summary: Collect time in each data sources in each round

Test Plan:
test in haxlsh
test the overhead in replay

Reviewed By: smarlow@fb.com

Subscribers: anfarmer, ldbrandy, watashi, smarlow, akr, bnitka, jcoens

FB internal diff: D1521346

Tasks: 4589842
2015-02-06 14:47:53 -08:00
Zejun Wu
7411284239 Update exposed-modules in haxl.cabal
Summary:
Haxl.Core.Env and Haxl.Core.Fetch were collapsed into Haxl.Core.Monad in
D1427283. Update haxl.cabal to reflect this and use PatternGuards to
suppress warnings.

Test Plan: ~/local/haxl-github $ cabal test

Reviewed By: jon.coens@fb.com

Subscribers: ldbrandy, smarlow, akr, bnitka, jcoens

FB internal diff: D1441939
2014-07-17 13:02:09 -07:00
Simon Marlow
ca83d6070c Update the DataCache strictly
Summary:
We weren't forcing the DataCache after inserting a new element, which
meant that an error would appear when next using the cache, rather than
when we insert the element.

Test Plan: new unit test

Reviewed By: bnitka@fb.com

Subscribers: ldbrandy, smarlow, akr, bnitka, jcoens

FB internal diff: D1420686

Tasks: 4637866
2014-07-17 13:02:02 -07:00
Simon Marlow
2f4d6336b2 Add catchIf
Summary: Useful for catching multiple kinds of exception with a single handler.

Test Plan: haxl/core unit tests

Reviewed By: jon.coens@fb.com

Subscribers: ldbrandy, jonp, smarlow, akr, bnitka, jcoens

FB internal diff: D1387298

Tasks: 4526990, 3727129
2014-07-17 13:01:53 -07:00
Simon Marlow
74a3874f0b Initial open source import 2014-06-10 02:47:59 -07:00