[Haskell-cafe] ANNOUNCE: DSTM 0.1.1
Andrew Coppin
andrewcoppin at btinternet.com
Wed Aug 4 11:48:28 EDT 2010
Frank Kupke wrote:
> Good questions. I am about to write a paper explaining the design of the DSTM library in more detail which I will link when available. Please bear with me, here. In the meantime please find some shorter answers below.
>
Well, that was pretty comprehensive. A few questions remain...
> - If the failure comes up *before* the transaction has been validated ok, it is aborted.
Right. So the transaction rolls back and the application gets an exception?
> - If the failure comes up *after* the transaction has been validated ok, it is committed.
>
So if a TVar goes walkabout in the split second between validate and
commit, the others commit anyway, and then the application gets an
exception?
In that case, is there a way to determine whether or not the rest of the
transaction completed? Because it looks like you can the same exception
either way, regardless of whether a commit happened or not.
>> 4. What network transport does this thing use? TCP? UDP? What port numbers?
>>
> DSTM uses TCP communication. It searches dynamically for available ports starting at port 60001, using 60000 for the name server. If two nodes are running each on a separate machine with a different IP address, chances are that both use the same port 60001. If they run on the same machine, most likely one will use port 60001 and the other 60002.
>
Right. So both the nameserver and any clients run on random port
numbers? (Begs the question of how the clients figure out which port a
remote nameserver is on...)
>> 5. How does it work? Does it spawn a Haskell thread for each machine connection or something?
>>
> Each node spawns a Haskell thread listening to its designated port and spawning itself a thread for each accepted TCP communication, i.e. one for each foreign node talking to it. Each such thread implements a communication line between two threads. I have tried several communication line schemas which I will describe in more detail in the paper yet to come...
>
What impact (if any) does threaded vs non-threaded RTS have?
More information about the Haskell-Cafe
mailing list