Magma notes III
muyuubyou
muyuubyou at gmail.com
Fri Jul 9 21:55:49 UTC 2004
Are you posting this somewhere in the swiki?
On Fri, 9 Jul 2004 14:47:16 -0700, Avi Bryant <avi at beta4.com> wrote:
> (My continuing mission to explore new databases, to seek out strange
> bugs, to... never mind).
>
> Ok, the next thing I'm interested in is reliablity. IIUC, Magma
> doesn't have a transaction log, which means that reliability is
> definitely a worry: is it possible for me to corrupt the database? How
> easy is it to lose data?
>
> I'm starting a new session, and I'm going to leave it in a loop
> committing the current time as quickly as it can:
>
> [[mySession commit: [mySession root at: 'now' put: Time now]] repeat]
> fork
>
> Actually this is interesting - what happens when I try to read that
> time, while the commit loop is running? Create a new session, try to
> access that key:
>
> mySession2 root at: 'now'
>
> Hmm, back to the silent-failure issue from part II.
>
> Create a third session, same problem.
>
> Well, hm, what do I do now? I guess I can halt the ever-committing
> process and see what happens then.
>
> Open the ProcessBrowser to try to kill the process (next time, keep a
> reference to it in the workspace), and the only one that seems right is
> currently in UndefinedObject>>handleSignal:. Maybe we hit an error
> while trying to commit? Try to debug the process, my image hangs. Ok,
> trash that one.
>
> New client image, open a new session, which seems to work - the server
> survived. That's good. But there's nothing at 'now' in the root. Did
> *none* of those commits work?
>
> Let's try that again with a delay between commits.
>
> [[mySession commit: [(Delay forSeconds: 1) wait. mySession root at:
> 'now' put: Time now]] repeat] fork
>
> Same problem: trying to access 'now' doesn't work.
> Well, maybe I've screwed up the root object somehow. Doesn't seem to
> be a way to reset the root, so I'll start a new repository on the
> server.
>
> Start a new repository, start a server console going, try to repeat the
> test, hit the exact same issue. I wonder - are there issues with
> having concurrent client sessions in different threads? Instead of
> forking, let's try repeating this commit some finite number of times...
>
> 1000 timesRepeat: [mySession commit: [mySession root at: 'now' put:
> Time now]]
>
> Ok, now try to access it:
>
> mySession2 root at: 'now'
>
> Oops, same problem. Create a new session?
>
> mySession3 root at: 'now'
>
> Ok, that worked.
>
> Now, let's try killing the server while that repeating commit is going
> on.
>
> 1000 timesRepeat: [mySession commit: [mySession root at: 'now' put:
> Time now]]
>
> First gently: I'm saving and quitting the server image. Some notifiers
> popped up about SharedQueue not being empty, but the image quit anyway.
>
> Just out of curiosity, try to use the client session while the server
> is down. My image locks up. After a while, I manage to interrupt it,
> inside a critical section in MaTcpRequestServerLink>>submit:.
>
> Ok, I bring the server image back up, close the notifiers, and start
> the console going again.
>
> Try to connect from the client, but it locks again. Do I need to
> manually signal that semaphore?
>
> Try that, but still can't connect. Let's switch to a new client image
> too.
>
> Ok, that took quite a while, but it did connect. Try to inspect the
> root, but all I get is the silent-failure thing again.
>
> If I look back at the server image, I've got an MNU for UndefinedObject
> of
> #maRead: bytes:bytesFromPosition:of:atFilePosition: . Looks like the
> file is nil? But it does exist:
>
> Saba:~/Documents/Squeak/magma avi$ ls -l
> total 192
> -rw-r--r-- 1 avi staff 44592 9 Jul 12:40 myrepos.magma
> -rw-r--r-- 1 avi staff 53184 9 Jul 14:21 myrepos2.magma
>
> Hm... maybe starting up the server console on restart was a bad idea,
> maybe it does that for me and I should leave it alone. Quit the server
> image, start it up again. Use a fresh client image too.
>
> Nope, same problem. Maybe I hosed the server image by saving and
> quitting it? I'll try a brand new server image and use the same
> database file.
>
> Ok, that seems to work, and I get the root back ok. Lesson learned: do
> not save and quit a running magma server.
>
> Next question - what happens if I kill the process instead? Start the
> repeating commit going, then force quit the server.
> Start up a new server image. Trying to connect from the old client
> image hangs; start a new client image too.
>
> Ok, can connect, but can't get the root - same old strange
> silent-failure business. Now I'm really stuck - this is a fresh server
> image and a fresh client image, and all I've tried to do is connect and
> look at the root. Is my data gone forever?
>
> Well, I think that's about as far as I'm willing to go today. Frankly,
> it's a lot further than I would go if I were evaluating Magma for use,
> rather than trying to give as much feedback as possible - I hit enough
> issues along the way that I would have long since lost the ability to
> muster the 110% confidence I would need to entrust my data to it. But
> I recognize that it's a work in progress, and so I hope my notes prove
> to be useful in taking it further.
>
> Chris, if there are particular issues I found that you want help in
> reproducing, just let me know.
>
> Cheers,
> Avi
>
>
More information about the Squeak-dev
mailing list
|