aboutsummaryrefslogtreecommitdiff
path: root/src/libstore
AgeCommit message (Collapse)Author
2014-02-17Make --repair work on DarwinEelco Dolstra
Mac OS X doesn't allow renaming a read-only directory. http://hydra.nixos.org/build/9113895
2014-02-17RefactoringEelco Dolstra
2014-02-17When using a build hook, only copy missing pathsEelco Dolstra
2014-02-17Move some code aroundEelco Dolstra
In particular, do replacing of valid paths during repair later. This prevents us from replacing a valid path after the build fails.
2014-02-17Heuristically detect if a build may have failed due to a full diskEelco Dolstra
This will allow Hydra to detect that a build should not be marked as "permanently failed", allowing it to be retried later.
2014-02-14Minor style fixesEelco Dolstra
2014-02-10Move StoreApi::serve into opServeShea Levy
Signed-off-by: Shea Levy <shea@shealevy.com>
2014-02-10Pass in params by const refShea Levy
Signed-off-by: Shea Levy <shea@shealevy.com>
2014-02-08Add download-via-ssh substituterShea Levy
This substituter connects to a remote host, runs nix-store --serve there, and then forwards substituter commands on to the remote host and sends their results to the calling program. The ssh-substituter-hosts option can be specified as a list of hosts to try. This is an initial implementation and, while it works, it has some limitations: * Only the first host is used * There is no caching of query results (all queries are sent to the remote machine) * There is no informative output (such as progress bars) * Some failure modes may cause unhelpful error messages * There is no concept of trusted-ssh-substituter-hosts Signed-off-by: Shea Levy <shea@shealevy.com>
2014-02-08nix-store --serve: Flush out after every loopShea Levy
Signed-off-by: Shea Levy <shea@shealevy.com>
2014-02-08nix-store --serve: Use dump instead of exportShea Levy
Also remove signing support Signed-off-by: Shea Levy <shea@shealevy.com>
2014-02-08nix-store --serve: Don't fail if asked for info about non-valid pathShea Levy
Signed-off-by: Shea Levy <shea@shealevy.com>
2014-02-08nix-store --serve: Don't loop foreverShea Levy
nix-store --export takes a tmproot, which can only release by exiting. Substituters don't currently work in a way that could take advantage of the looping, anyway. Signed-off-by: Shea Levy <shea@shealevy.com>
2014-02-08Add the nix-store --serve commandShea Levy
This is essentially the substituter API operating on the local store, which will be used by the ssh substituter. It runs in a loop rather than just taking one command so that in the future nix will be able to keep one connection open for multiple instances of the substituter. Signed-off-by: Shea Levy <shea@shealevy.com>
2014-02-03Fix assertion failure in ‘nix-store --load-db’Eelco Dolstra
Namely: nix-store: derivations.cc:242: nix::Hash nix::hashDerivationModulo(nix::StoreAPI&, nix::Derivation): Assertion `store.isValidPath(i->first)' failed. This happened because of the derivation output correctness check being applied before the references of a derivation are valid.
2014-02-01Give a friendly error message if the DB directory is not writableEelco Dolstra
Previously we would say "error: setting synchronous mode: unable to open database file" which isn't very helpful.
2014-02-01Fix "make dist"Eelco Dolstra
2014-02-01Remove AutomakefilesEelco Dolstra
2014-02-01Update Makefile variable namesEelco Dolstra
2014-01-30Rename Makefile -> local.mkEelco Dolstra
2014-01-21Fix some clang warningsEelco Dolstra
2014-01-21Merge branch 'master' into makeEelco Dolstra
Conflicts: src/libexpr/eval.cc
2014-01-09Generate schema.sql.hhEelco Dolstra
2014-01-09Update MakefilesEelco Dolstra
2014-01-08Fix checking of NAR hashesEelco Dolstra
*headdesk* *headdesk* *headdesk* So since commit 22144afa8d9f8968da351618a1347072a93bd8aa, Nix hasn't actually checked whether the content of a downloaded NAR matches the hash specified in the manifest / NAR info file. Urghhh...
2014-01-06wordingDomen Kožar
2013-12-10Garbage collector: Release locks on temporary root filesEelco Dolstra
This allows processes waiting for such locks to proceed during the trash deletion phase of the garbage collector.
2013-12-05Print a trace message if a build fails due to the platform being unknownEelco Dolstra
2013-11-25Rename Makefile.new -> MakefileEelco Dolstra
2013-11-23Use libnix as a prefix for all Nix librariesEelco Dolstra
In particular "libutil" was always a problem because it collides with Glibc's libutil. Even if we install into $(libdir)/nix, the linker sometimes got confused (e.g. if a program links against libstore but not libutil, then ld would report undefined symbols in libstore because it was looking at Glibc's libutil).
2013-11-23Allow (dynamic) libraries to depend on other librariesEelco Dolstra
2013-11-22Drop the dependency on AutomakeEelco Dolstra
2013-11-22Rename $(here) to $(d) for brevity, and remove trailing slashEelco Dolstra
2013-11-22Add ‘make dist’ supportEelco Dolstra
2013-11-22New non-recursive, plain Make-based build systemEelco Dolstra
2013-11-22Include <cstring> for memsetEelco Dolstra
This should fix building on Illumos.
2013-11-14Remove nix-setuid-helperEelco Dolstra
AFAIK, nobody uses it, it's not maintained, and it has no tests.
2013-11-12Make function calls show up in stack traces againEelco Dolstra
Note that adding --show-trace prevents functions calls from being tail-recursive, so an expression that evaluates without --show-trace may fail with a stack overflow if --show-trace is given.
2013-10-22For auto roots, show the intermediate linkEelco Dolstra
I.e. "nix-store -q --roots" will now show (for example) /home/eelco/Dev/nixpkgs/result rather than /nix/var/nix/gcroots/auto/53222qsppi12s2hkap8dm2lg8xhhyk6v
2013-10-16Retry all SQLite operationsEelco Dolstra
To deal with SQLITE_PROTOCOL, we also need to retry read-only operations.
2013-10-16Fix a race in registerFailedPath()Eelco Dolstra
Registering the path as failed can fail if another process does the same thing after the call to hasPathFailed(). This is extremely unlikely though.
2013-10-16Convenience macros for retrying a SQLite transactionEelco Dolstra
2013-10-16Don't wrap read-only queries in a transactionEelco Dolstra
There is no risk of getting an inconsistent result here: if the ID returned by queryValidPathId() is deleted from the database concurrently, subsequent queries involving that ID will simply fail (since IDs are never reused).
2013-10-16Print a distinct warning for SQLITE_PROTOCOLEelco Dolstra
2013-10-16Treat SQLITE_PROTOCOL as SQLITE_BUSYEelco Dolstra
In the Hydra build farm we fairly regularly get SQLITE_PROTOCOL errors (e.g., "querying path in database: locking protocol"). The docs for this error code say that it "is returned if some other process is messing with file locks and has violated the file locking protocol that SQLite uses on its rollback journal files." However, the SQLite source code reveals that this error can also occur under high load: if( cnt>5 ){ int nDelay = 1; /* Pause time in microseconds */ if( cnt>100 ){ VVA_ONLY( pWal->lockError = 1; ) return SQLITE_PROTOCOL; } if( cnt>=10 ) nDelay = (cnt-9)*238; /* Max delay 21ms. Total delay 996ms */ sqlite3OsSleep(pWal->pVfs, nDelay); } i.e. if certain locks cannot be not acquired, SQLite will retry a number of times before giving up and returing SQLITE_PROTOCOL. The comments say: Circumstances that cause a RETRY should only last for the briefest instances of time. No I/O or other system calls are done while the locks are held, so the locks should not be held for very long. But if we are unlucky, another process that is holding a lock might get paged out or take a page-fault that is time-consuming to resolve, during the few nanoseconds that it is holding the lock. In that case, it might take longer than normal for the lock to free. ... The total delay time before giving up is less than 1 second. On a heavily loaded machine like lucifer (the main Hydra server), which often has dozens of processes waiting for I/O, it seems to me that a page fault could easily take more than a second to resolve. So, let's treat SQLITE_PROTOCOL as SQLITE_BUSY and retry the transaction. Issue NixOS/hydra#14.
2013-09-06Don't apply the CPU affinity hack to nix-shell (and other Perl programs)Eelco Dolstra
As discovered by Todd Veldhuizen, the shell started by nix-shell has its affinity set to a single CPU. This is because nix-shell connects to the Nix daemon, which causes the affinity hack to be applied. So we turn this off for Perl programs.
2013-09-02Only show trace messages when tracing is enabledEelco Dolstra
2013-09-02Add an option to limit the log output of buildersEelco Dolstra
This is mostly useful for Hydra to deal with builders that get stuck in an infinite loop writing data to stdout/stderr.
2013-08-26Fix typos, especially those that end up in the Nix manualIvan Kozik
2013-08-26Fix personality switching from x86_64 to i686Gergely Risko
On Linux, Nix can build i686 packages even on x86_64 systems. It's not enough to recognize this situation by settings.thisSystem, we also have to consult uname(). E.g. we can be running on a i686 Debian with an amd64 kernel. In that situation settings.thisSystem is i686-linux, but we still need to change personality to i686 to make builds consistent.