For consistant reads across requests per doozerd/client (i.e. seeing
the same tree across multiple requests on any doozerd), pass the REV
for the tree you want to see.
>
> This probably comes at a speed cost compared to Zookeeper where consistency
> is guaranteed on a per-client
> basis. Correct?
We don't have benchmarks to say either way.
> Has anyone made head-to-head performance measurements?
>
> To the authors: Can you provide a pointer to the respective algorithmic
> literature describing the
> consensus algorithm used? Is it the chubby paper? Other?
PAXOS is the algorithm for consensus.
> Thanks,
> Petar
>
I will take a look at your persistent solution as well.
Petar
(1) if I execute a SET with a body larger than 2000 (or so) bytes, the client
blocks and server seems unusable afterwards. Smaller SETs are fine.
(2) I am not sure how to make a directory. I execute a
Set("/name", rev, nil) and then try
Set("/name/a0", rev, body) and I get a NOTDIR error.
I've tried replacing the nil with make([]byte, 0) and so forth
and I always get the same error.
Thanks
Petar
$ touch foo
$ mkdir foo/bar
mkdir: foo: Not a directory
Could you, please, give me an example how to create a directory
"/a" and a file "b" inside of it, using the Go routines supplied by the
doozer library.
Thank you
Petar
package main
import(
"fmt"
"os"
"github.com/4ad/doozer"
)
func main() {
dzr, err := doozer.Dial("127.0.0.1:8040")
if err != nil {
fmt.Printf("dial (%s)", err)
return
}
defer dzr.Close()
_, err = dzr.Set("/x0", 6000, nil)
if err != nil {
fmt.Fprintf(os.Stderr, "set /x0 (%s)\n", err)
os.Exit(1)
}
_, err = dzr.Set("/x0/tom", 6000, nil)
if err != nil {
fmt.Fprintf(os.Stderr, "set /x0/tom (%s)\n", err)
os.Exit(1)
}
fmt.Printf("ok\n")
What about the second issue:
Setting bodies of size 3000 bytes seems to block the client
and the server.