On 06/11/10 02:40 PM, Karen Tung wrote:
Hi Darren,

More responses inline.  I also remove all the sections
where I have no further comment.

On 06/10/10 12:26 AM, Darren Kenny wrote:
Hi Karen,

More responses, with some parts cut out where I've no more comment...

On 06/10/10 12:17 AM, Karen Tung wrote:
On 06/09/10 02:24, Darren Kenny wrote:
Section 4, page 5:
I'm wondering if the programming language to use is really a choice for this project since it's been decided at the higher level of the CUD design
      that Python is the language of choice for new implementations.

I didn't see any specific mention of Python in the architecture design doc. It only talks about using an Object Oriented language. So, I thought I will
be complete, and talk about other potential choices here.

I don't think this is mentioned in the architecture document. Not that I can find anyway...

That's true, but I feel that this is something that should be fixed in the architecture document rather than here since it's certainly the assumption
that the majority of people are working on.

I agree with you that it should be specified in the architecture document.
Let me check with Sarah again on this.  When we were reviewing the
architecture document, I actually mentioned about this.  She said at
that time that she doesn't want to put any implementation language
info there.

I don't think it should be mentioned in the architecture document. In general, imo, the architecture document should specify software constraints as deemed necessary to support the architectural goals. I consider things such as extensibility, scalability, performance and local standards such as cstyle as possible constraints that should be named. There are many others, this is just a small example. I don't believe it is up to the architecture to define design, except in the form of requirements and constraints that might impact the designs.

There are many cases in Caiman that we don't use Python. For example, with the error service library that was written some time ago, it was decided this would be done in C. And, this made good sense. The fact that we have to hook the error service library in to a number of other components, possibly written in Python was considered but the overall goals of this software didn't require it. We also have the AI client in C, and yet it must interact with the Engine, which is will be in Python. My point is that the language chosen for the components must support the requirements and constraints.

Python is a design decision, but to be honest it doesn't have to be Python. I think Karen's assessment in the design document is the correct place for this. And, she correctly assessed the possible solutions for object oriented languages. We could have used Java, or C++, if we felt it was the better choice.

If you think that the use of Python is critical to how the architecture is defined or puts constraints on the architecture that we must account for, then I can see adding it. I don't think it does impact the overall architecture as defined.

thanks,
sarah
****

thanks,
sarah
****


If the application want to do something else when execute_checkpoint() is
running, it should run execute_checkpoint() in a thread.
Ok, but I wonder if this is an extra level of threading that really shouldn't be needed? For example, right now, the GUI doesn't need to run liborchestrator in a separate thread when doing TD, it's something that's hidden from the GUI, a change like this means that the GUI needs to add another thread-level. (It's more of an example really, since the GUI is probably going to need re-work
anyway to work with the new CUD).

It just seems that the Engine would seem to be the logical place to manage the
threading of things, since it's likely to be doing threading anyway...
What you said makes sense.  Let me think about that as I add
the threading section.

Section 6.3.1, page 8:
Maybe the use of the term "dangerous" is too severe? It might be better to be specific about the risk, and how it might be able to be prevented.

I can talk about risk, but is there really a way to prevent it?
We do allow checkpoints to exist everywhere.  Do we want to restrict it
to loading from a certain location?
I think it's more how people implementing checkpoints and using the Engine could mitigate the risk, if at all possible - e.g. we could make the use of a directory path a high-risk while using a module name - to be loaded from sys.path - would be considered safer? Maybe thus producing a warning if it's
seen to be a full path, or something...
That sounds like a good suggestion.  I will add that as a recommendation
in the description of the register_checkpoint() function.  Since we
only throw a warning if it is outside our "recommended area",
people will still be able to continue.  So, we are not limiting their
ability to have their checkpoint implementation anywhere.

Section 6.7.1, page 12:
How are you going to guarantee that removal of snapshots from /tmp will not remove snapshots from other processes - e.g. are you using a dir for each run (/tmp/install_snapshots.PID/), just might be worth spelling out.

Section 7.4, the second bullet point did talk about using PID for DOC
snapshots that are stored in /tmp.  Do you think that's sufficient?
I think that's fine, but I would prefer to see things put in a sub-directory -
especially in the case of DC - to avoid lots of messy files in /tmp.

(Dave has mentioned the possible mis-use of /tmp).
Based on Dave's recommendation, I will use /var/tmp.
What you said about putting checkpoint related data for a certain
run in a directory makes sense.  I don't even need to use
pid to guaranteed having a unique name.  I can use the Python
feature to generate a temp name that's unique.  So,
each process will have it's own directory in /var/tmp like this:

/var/tmp/<tmp_dir_name>/
Section 7.5, page 15&   16:
How is "DataObjectCacheNotEmpty" state determined? Should the DOC provide a is_empty() method is or just checking that len(doc.children) == 0,
      enough?

I was going to use doc.get_descendants() to make sure it return
an empty list.  Looks like I can use len(doc.children) too.
Are they both the same?  Is one better than the other?
The call to get_descendants() would be (potentially) an expensive operation if the tree isn't empty - I will provide a suitable method for you, especially
given that there are two sub-trees, e.g.:

     doc.persistent.has_children

(which is really the one you want to check for roll-backs...)
OK, I will use whatever API you will provide then.

Thanks,

--Karen

_______________________________________________
caiman-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/caiman-discuss

_______________________________________________
caiman-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/caiman-discuss

Reply via email to