Re: Facing the End ;-)

Tyler Dauwalder <tyler-cyCl/[email protected]>
Newsgroups gmane.os.openbeos.storage
Message-ID <[email protected]>

On 2003-01-21 at 16:29:59 [-0800], [email protected] wrote:
> 
> Hi,
> 
> for Tyler seems still to be busy with the CD session module, I wrote
> down a little list of what I encountered re-reading DeviceMap.h.

Well, that and life. :-) I think the session module is working now, but 
I'm running into partition problems. I need to play with it a bit more, 
then I will let you know what I find.  

> * Quite at the beginning of the file one finds a enumeration of
> P_UNKNOWN, P_UNREADABLE, P_ADD_ON and P_AUDIO. Though the `P_' sounds 
> a
> bit like `partition', I think, these are session types 
> (Session::type).
> P_AUDIO is clear and P_ADD_ON probably means, that there's a partition
> add-on recognizing the session contents. I'm not sure, where the
> difference between the other two is. Maybe P_UNKNOWN is just the value
> for `uninitialized'. Then P_UNREADABLE stands for a session for that 
> no
> partition add-on exists and that isn't audio.

Sounds like a reasonable guess to me. For CDs at least, one can 
determine from the table of contents if the session contains audio or 
data tracks.

> * In DeviceMapGlue.h we find the structure drive_setup_partition_flags
> containing two flags, can_partition and can_repartition. Probably
> partition add-on properties. There is a 
> Device::SetPartitioningFlags(),
> but no method to get the values. No need to say, that the API doesn't
> even support partitioning. Moreover I'm not sure what meaning
> `can_repartition' has. Whether the partition add-on can re-partition 
> an
> already partitioned device? That doesn't make much sense in my 
> opinion.
> But I somehow doubt, that this is about moving and resizing 
> partitions.
> Something we may want to consider, BTW.
> Resizing is certainly something the FS must support in the first 
> place,
> but it's certainly desirable to have support for this in the
> disk_scanner module, too. I think, it could basically be transparent
> for the API. That is, the GUI partition add-on would offer resizing/
> moving of partitions as an option and set the parameters passed to the
> kernel module accordingly. The kernel module would need some support
> functions to tell the file systems on the concerned partitions to
> adjust accordingly. I imagine a function that gets a list/array of
> change requests, each one specifying old and new positions and sizes 
> of
> partition contents. If possible, i.e. if all concerned FSs support the
> requested operations, the requests are carried out, otherwise 
> rejected.
> Then the partition module adjusts the partition tables and is done.
> It would certainly be nice, if the GUI add-on could retrieve more
> information about the FSs residing on the partitions of the session to
> be resized, so that it could avoid presenting the user an option that
> is not feasible. It would probably be sufficient, if a fs_info could 
> be
> retieved for the FSs.

I would *love* to see something like that supported at the OS level. 
Sounds a bit like R2 to me.

> * Regarding flags for partitioning (that is those mentioned above): I
> think, the GUI add-ons should return those, not the kernel module. As 
> I
> tend to find it a good idea to make a respective GUI add-on a
> requirement for partitioning, it appears to me, that then the GUI add-
> on can tell, what extactly is supported. 

Hmmmm, wouldn't this bind you to using the GUI to perform a repartition 
or resizing? Say you have 200 computers, all with identical 
partitioning schemes, and you want to resize/repartition them all to 
new sizes, but would rather write a console app to do such a task than 
manually do it via the GUI on each one of them. 

> Regaring the FS flags
> mentioned in my previous mail, I will add a `fs_flags' field to
> extended_partition_info, that will look the same as fs_info::flags. 
> (If
> also a free_blocks would be added, then one should have enough
> information for resizing of partitions.)

Sounds good.

> * Do I overlook something, or am I right, saying that the BBitmaps
> (largeIcon, miniIcon) in Device are not needed? A GetIcon() in
> Partition would make some sense though.

Perhaps the same icon is used for all partitions on a given device? Why 
not keep something like Device::GetIcon(), then add a virtual 
Partition::GetIcon() that can optionally provide a custom icon?

> * Currently I'm not sure how changes of devices are detected. Any 
> idea,
> how one can find out, whether e.g. the CD has been changed, or the
> floppy?

No help here. :-(

> To sum it up, I think, basically the functionality of our low level 
> API
> is sufficient to implement the functionality of the C++ Device API.
> Only the item listed last needs a solution, but I believe, that's
> nothing the disc_scanner API should (or can) provide; there's 
> certainly
> some syscall()/ioctl() that supplies the needed information.
> 
> Anyway, here are some questions concerning the disk_scanner stuff:
> 
> * Shall there be a difference between the file_system_short_name field
> in the extended_partition_info structure and the fileSystem parameter
> of the initialize_volume() (or mount()) function? I originally 
> thought,
> that it might be better to have a long and a short name presentable to
> the user and an only internally used identifier. But maybe that 
> doesn't
> make much sense. The GUI add-on API has different getter functions for
> both. The same holds for the partition add-on.

I don't think I see any reason to differentiate between the two. 
Particularly if we clearly document the fact that the short name is 
used for initialize_volume() and friends, I don't see why it'd be a 
problem.

> * I think, it is a good idea, if get_nth_partition_info() could
> optionally return the identifier of the partition module (and if short
> name != identifier also of the FS), since currently it is not even
> possible to find out which GUI add-on belongs to the partitioning
> system used for a certain session.

Fair enough.

> * I still dislike the partition_code field in the
> extended_partition_info structure, since it is partitioning system
> specific, and therefore IMHO should not be in a generic structure. The
> only reason why it's still there, is that I found it in the
> partition_data structure used for the DriveSetup add-ons. What about a
> little voting. :-P

Tyler: Make it 32-bits and call it a day. :-)

> Finally some words on the further proceeding. Since the disk_scanner
> API seems to be sufficiently complete, I think, we can start with the 
> C
> ++ API. Here some thoughts:
> 
> I believe, it is a good idea to break source compatibility, even if it
> is only to replace TypedList by BObjectList and move the classes into
> an appropriate namespace (BPrivate:: or B* -- I prefer the latter
> one)... and maybe rename Device to something less general, e.g. BDisk.
> But actually I would even change some more things...

I say, if we break compatibility, we go all out and fix the static, 
messy API as well.

> E.g. remove a couple of public setter methods or make them private.
> Partition has bunch of them, but I actually don't see why. The Tracker
> uses three (SetMountState(), SetMountedAt() and SetVolumeName()), but
> only to update an object when changes occured. I find it more logical
> to rather introduce an Update() method that retrieves and sets the
> information by itself.

Sounds reasonable.

> To tell the truth, I somehow dislike the whole API. It is too static.
> Er, actually it simply is static. :-P If one takes a look at the
> BVolume/BVolumeRoster classes, that's more like it should work: One 
> can traverse the current list and get notifications when something has
> changed.

I agree. It feels very unfinished and thrown together, which I imagine 
it probably was. I would much prefer to see it done properly.

> Anyway, unless there are general objections, e.g. concerning the idea
> of dropping source compatibility, I will come up with an API proposal
> (headers and some documentation), that will be relatively close to the
> current one. Don't expect anything before the weekend though. Enough
> time for bashing. ;-)

My only concern is wrt to the OpenTracker changes that would have to be 
made. And personally, I'm okay with doing the changes; I think it's 
worth it just to do the API right the first time. I'm just wondering 
what that OpenTracker guy will have to say to the idea... ;-)

-Tyler
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.