Hi Sarah.
On 01/12/10 10:39, Sarah Jelinek wrote:
>
>
> Jack Schwartz wrote:
>> Hi Sarah.
>>
>> In order to keep it shorter, I have only left in this email the items
>> I had further comments on.
>
> Hi Jack,
>
> My comments inline...
>
>>
>> On 01/08/10 14:11, Sarah Jelinek wrote:
>>>> Section 1:
>>>
>>>> second to last PP: 1st sentence was confusing: Could the first type
>>>> of components be described as "... a set of application components
>>>> that are used to implement higher-level functionality..."? (I
>>>> assume that installing a set of packages is an example here because
>>>> this functionality is layered on top of the pkg(5) command itself.)
>>>
>>> What we intend to describe by this is that the these components(the
>>> first type), are very specific to the application that uses them.
>>> For example, we will have a 'Media Creation' component for the
>>> distro constructor that is specific to the distro constructor. It
>>> isn't about higher lever functionality(although that is certainly
>>> true), it's about it being application specific functionality, that
>>> isn't common across the Caiman installer apps. If you have
>>> suggestions on how to describe this in a less confusing way, let me
>>> know.
>> OK, so if I understand correctly, the first set of classes implement
>> interfaces dealing with a particular functionality, such as media
>> creation. DC has its version of the class which implements the media
>> creation interfaces, installers have their versions. I would spell
>> this out in the document, for example:
>
>> "The first set of components define interfaces for specific
>> functionality which can vary slightly between the applications that
>> use them. For example, interfaces for installing packages are needed
>> for both DC and different installers, and will be implemented
>> differently for each application."
>>
>> What threw me was seeing the package installation example as general
>> since all applications do it, and not focusing on the differences
>> between how the applications use it.
>>
>> The word "Common" in "Common Application Classes" does not make the
>> first group of classes sound specific. This gets tricky since the
>> functionality is common but when "zooming in" to the details, the
>> functionality differs.
>
> The first set of classes in the paragraph you noted are the
> Application Specific classes. The 2nd set is the Common Application
> classes.
>
> The first set of classes are application specific. For example, Media
> Creation isn't likely something that will be used by any other Caiman
> installer app. It is pretty specific to DC.
OK. I took media creation and turned it into more general "package
installation using pkg". My misunderstanding.
>
> The 2nd set of classes, the Common Application classes, are common.
> So, for example, the Transfer classes will be used by the Caiman
> applications, including DC, and they won't be different for those
> applications. To use your example, installing packages is the same for
> those that need installation of packages.
Yes.
>
>>>> Section 2.2:
>>>>
>>>> second bullet: sounds too specific to AI. Leave AI out of it, and
>>>> just say "manifest".
>>>
>>> Actually, it is specific to an AI manifest. The idea is that we want
>>> to generate an AI manifest so that the user can recreate the install
>>> they just performed using liveCD or text installer, using AI. So,
>>> they have an automated, hands-off way to replicate the install. Does
>>> this make sense?
>> But DC or some other user of a manifest may want this functionality
>> too. IMO this shouldn't be functionality offered only by AI.
>> Further, since this functionality will be offered by a tool used by
>> many applications, all applications which use it can take advantage
>> of it.
>
> Possibly. Here's what we can do. We can dump the cache and produce a
> manifest for the 'data' part of the installation, which could be used
> by DC. The 'execution' part, which DC also has(ala finalizer script
> specification) isn't something that this feature can provide. With the
> manifest rework I am doing the AI and DC manifests will be in sync, in
> terms of the 'data' part of the schema. I can remove the AI reference
> and just say manifest. In general we will dump a manifest, which has
> to have meaning to a Caiman installer app.
Yes, this would be a dump of the data in the format of the application's
manifest. This data can then be used later to re-create the same
operation (e.g. installation, creation).
>
> >>> 3.2.1.2:
>>>>
>>>> VMEnv class:
>>>> The content of this PP seems tilted toward xVM. What about Virtual
>>>> Box? LDoms?
>>>
>>>>
>>>> The VMEnv class has no methods. Is the point of the VMEnv class to
>>>> "mark" an environment as a virtual machine environment? Is it an
>>>> interface spec which can be combined with other interface specs in
>>>> this section (e.g. LogicalVolume that defines a lofi-mounted file
>>>> enveloping the VM environment)?
>>>
>>> We don't create VMEnv's as part of our installation, so this class
>>> is simply a class that allows for discovery of VM's so that the
>>> installer can show the details of the existing environments. It
>>> wasn't my intent that it be combined with other interfaces, it is
>>> simply a way to distinguish the existing environment's targets.
>> Doesn't a custom VMEnv get created as part of Glenn's virtual machine
>> constructor? ... or maybe this is a burried implementation detail
>> that isn't relevant here as it's not part of the VM constructor's
>> final product?
>
> Yes, it does, as part of a DC run. That's an interesting point. Since
> DC will be using the engine, it makes sense it would be using the
> Target Data classes so I may need to rethink this. Actually, I am sure
> I need to rethink this. Thank you for pointing this out. I will rework
> this section.
:)
>
>>> However, in responding to you I realized that some of the details of
>>> the associations for VMEnv's are not specified. I don't intend to
>>> include VBox(type 2) in this class.
>> OK...
>>>
>>> LDoms are type 1, as is xVM. So, in this case there is a 'storage'
>>> device mapped to the domain and that is something we need to be able
>>> to show the associations for. Storage can be zvol, file, or physical
>>> device. anything that looks like a block device. With Vbox, they
>>> manage the 'storage' via a file, we can define its location, but it
>>> is simply a file.
>> OK, so what you are interested in is the file system which would get
>> created inside that file (or possibly a lofi-mounted file, for that
>> matter), not the file itself.
>
>
> Yes, basically that's what I am interested in.
>
>>> So, when the 'storage' for a VM is not a physical device, the
>>> associations will show up via a Zpool class. The file must reside
>>> somewhere so any storage allocated to the datasets will be shown as
>>> 'in use' When 'storage' is a physical device we want to show that
>>> the allocated device is part of a VM. I need to work on this class
>>> a bit more since it is not complete(as I talk through my response).
>>>
>>> Why not type 2 hypervisors? Because they don't matter in terms of
>>> target discovery, or target instantiation(because we don't create
>>> them). They are backed by a file, which will be contained in a
>>> dataset, contained in a pool, so we don't have to manage this
>>> association knowledge.
>> OK
>
> Except, with the use case you mention above, I need to rethink this.
>
>>>> 4.2.2:
>>>> Drawing 4.3:
>>>
>>>> I think that when you look at the columns, the partition loop
>>>> envelopes the slice loop. (That is, the right most :partition
>>>> column represents the looping through all partitions, and following
>>>> that column down, we enter the slice loop for that partition.)
>>>> This seems correct to me. But the box enveloping the slice loop is
>>>> outside the box enveloping the partition loop. Shouldn't the slice
>>>> loop box be inside the partition loop box, much like the partition
>>>> loop box is inside the disk loop box?
>>>
>>> The outermost loop box is for all of 'Target Discovery'. Just to be
>>> clear. The looping, for slice discovery comes from the 'Partition'
>>> object. If you look at the diagram, the creation of the Slice object
>>> happens from a Partition object. It is hard to see, but the intent
>>> is that a Partition starts discovery for its slices. The loop boxes
>>> do not have to be overlapping or embedded in each other. The loop
>>> box is intended to show what the constraint is, discover != NULL,
>>> that's it really. It's hard to show this with UML.
>> OK, so now my understanding is that the dotted line starting from
>> :Partition and leading to the slice loop means to loop through all
>> slices of a given partition. The slice value is not considered in
>> whether to loop again, but only (discover != NULL) is.
>
> Basically yes. However, if there are no more slices, then discover
> would be set to NULL. 'discover' is simply the term I put in the UML
> diagram, but that translates, in this case, to are there any more
> slices for this partition? If not, stop looping.
OK. Seems clearer to say something like "loop through all slices"
instead of "discover != NULL".
<snip>
>
>
> Thank you again for taking the time to look at this in such detail.
> Your comments were great!
Thank you for taking the time to clarify both the document and my
understanding! Much appreciated!
Jack
>
> sarah