* First remote operation: isValidPath().
This commit is contained in:
parent
765bdfe542
commit
a711689368
4 changed files with 63 additions and 7 deletions
|
@ -6,7 +6,8 @@ libstore_la_SOURCES = \
|
||||||
|
|
||||||
pkginclude_HEADERS = \
|
pkginclude_HEADERS = \
|
||||||
store-api.hh local-store.cc remote-store.cc derivations.hh misc.hh \
|
store-api.hh local-store.cc remote-store.cc derivations.hh misc.hh \
|
||||||
globals.hh db.hh references.hh pathlocks.hh gc.hh
|
globals.hh db.hh references.hh pathlocks.hh gc.hh \
|
||||||
|
worker-protocol.hh
|
||||||
|
|
||||||
libstore_la_LIBADD = ../libutil/libutil.la ../boost/format/libformat.la
|
libstore_la_LIBADD = ../libutil/libutil.la ../boost/format/libformat.la
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "serialise.hh"
|
#include "serialise.hh"
|
||||||
#include "util.hh"
|
#include "util.hh"
|
||||||
#include "remote-store.hh"
|
#include "remote-store.hh"
|
||||||
|
#include "worker-protocol.hh"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
@ -55,27 +56,36 @@ RemoteStore::RemoteStore()
|
||||||
|
|
||||||
|
|
||||||
/* Send the magic greeting, check for the reply. */
|
/* Send the magic greeting, check for the reply. */
|
||||||
writeInt(0x6e697864, to);
|
writeInt(WORKER_MAGIC_1, to);
|
||||||
|
|
||||||
unsigned int magic = readInt(from);
|
unsigned int magic = readInt(from);
|
||||||
if (magic != 0x6478696e) throw Error("protocol mismatch");
|
if (magic != WORKER_MAGIC_2) throw Error("protocol mismatch");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
RemoteStore::~RemoteStore()
|
RemoteStore::~RemoteStore()
|
||||||
{
|
{
|
||||||
|
writeInt(wopQuit, to);
|
||||||
|
readInt(from);
|
||||||
|
child.wait(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool RemoteStore::isValidPath(const Path & path)
|
bool RemoteStore::isValidPath(const Path & path)
|
||||||
{
|
{
|
||||||
throw Error("not implemented");
|
writeInt(wopIsValidPath, to);
|
||||||
|
writeString(path, to);
|
||||||
|
unsigned int reply = readInt(from);
|
||||||
|
return reply != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Substitutes RemoteStore::querySubstitutes(const Path & srcPath)
|
Substitutes RemoteStore::querySubstitutes(const Path & srcPath)
|
||||||
{
|
{
|
||||||
throw Error("not implemented");
|
// writeInt(wopQuerySubstitutes);
|
||||||
|
|
||||||
|
// throw Error("not implemented 2");
|
||||||
|
return Substitutes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
16
src/libstore/worker-protocol.hh
Normal file
16
src/libstore/worker-protocol.hh
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#ifndef __WORKER_PROTOCOL_H
|
||||||
|
#define __WORKER_PROTOCOL_H
|
||||||
|
|
||||||
|
|
||||||
|
#define WORKER_MAGIC_1 0x6e697864
|
||||||
|
#define WORKER_MAGIC_2 0x6478696e
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
wopQuit = 0,
|
||||||
|
wopIsValidPath = 1,
|
||||||
|
wopQuerySubstitutes = 2,
|
||||||
|
} WorkerOp;
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* !__WORKER_PROTOCOL_H */
|
|
@ -2,6 +2,7 @@
|
||||||
#include "local-store.hh"
|
#include "local-store.hh"
|
||||||
#include "util.hh"
|
#include "util.hh"
|
||||||
#include "serialise.hh"
|
#include "serialise.hh"
|
||||||
|
#include "worker-protocol.hh"
|
||||||
|
|
||||||
using namespace nix;
|
using namespace nix;
|
||||||
|
|
||||||
|
@ -11,11 +12,39 @@ void processConnection(Source & from, Sink & to)
|
||||||
store = boost::shared_ptr<StoreAPI>(new LocalStore(true));
|
store = boost::shared_ptr<StoreAPI>(new LocalStore(true));
|
||||||
|
|
||||||
unsigned int magic = readInt(from);
|
unsigned int magic = readInt(from);
|
||||||
if (magic != 0x6e697864) throw Error("protocol mismatch");
|
if (magic != WORKER_MAGIC_1) throw Error("protocol mismatch");
|
||||||
|
|
||||||
writeInt(0x6478696e, to);
|
writeInt(WORKER_MAGIC_2, to);
|
||||||
|
|
||||||
debug("greeting exchanged");
|
debug("greeting exchanged");
|
||||||
|
|
||||||
|
bool quit = false;
|
||||||
|
|
||||||
|
do {
|
||||||
|
|
||||||
|
WorkerOp op = (WorkerOp) readInt(from);
|
||||||
|
|
||||||
|
switch (op) {
|
||||||
|
|
||||||
|
case wopQuit:
|
||||||
|
/* Close the database. */
|
||||||
|
store.reset((StoreAPI *) 0);
|
||||||
|
writeInt(1, to);
|
||||||
|
quit = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case wopIsValidPath: {
|
||||||
|
Path path = readString(from);
|
||||||
|
assertStorePath(path);
|
||||||
|
writeInt(store->isValidPath(path), to);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw Error("invalid operation");
|
||||||
|
}
|
||||||
|
|
||||||
|
} while (!quit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue