Re: DiskDevice API v2.1

"Ingo Weinhold" <bonefish-CFLBMwTPW48UNGrzBIF7/[email protected]>
Newsgroups gmane.os.openbeos.storage
Message-ID <17114805562-BeMail@graete>
Tyler Dauwalder <tyler-cyCl/[email protected]> wrote:
> 
> > > > Okay, that seemed to be a stupid idea :)
> > > > But we should make sure that the user can see which tasks still
> > > > have
> > > > to be carried out
> > > We could add methods to BDiskDeviceRoster to provide support for
> > > that.
> > > The typical iteration methods (GetNextActiveJob(BDiskDeviceJob*),
> > > RewindActiveJobs()) and watching support (StartWatchingJobs(),
> > > StopWatchingJobs()). BDiskDeviceJob (or better name=3D3D3F) would 
> > > feature
> > > methods for returning general information about the job, as well 
> > > as
> > > its
> > > current progress.
> > 
> > Sounds good.
> 
> I added:
> 
> // disk device job types
> enum {
> 	B=5FDISK=5FDEVICE=5FJOB=5FCREATE,
> 	B=5FDISK=5FDEVICE=5FJOB=5FDELETE,
> 	B=5FDISK=5FDEVICE=5FJOB=5FINITIALIZE,
> 	B=5FDISK=5FDEVICE=5FJOB=5FRESIZE,
> 	B=5FDISK=5FDEVICE=5FJOB=5FMOVE,
> 	B=5FDISK=5FDEVICE=5FJOB=5FDEFRAGMENT,
> 	B=5FDISK=5FDEVICE=5FJOB=5FREPAIR,
> }
> 
> class BDiskDeviceJob {
> public:
> 	int32 ID() const;
> 	uint32 Type() const;	
> 	uint8 Progress() const;		// 0 to 100

Maybe better float with range 0 - 1.0=3F That would be more compatible 
with BStatusBar and is also easier to calculate.

> 	bool Finished() const;	
> 	const char *Description() const;
> 	
> 	BPartition* Partition() const;
> private:
> 	int32 fPartitionID;
> 	int32 fJobID;
> };
> 
> // watchable events
> enum {
> 	B=5FDEVICE=5FREQUEST=5FMOUNT=5FPOINT	=3D 0x01,	// mount point changes
> 	B=5FDEVICE=5FREQUEST=5FMOUNTING		=3D 0x02,	// mounting/unmounting
> 	B=5FDEVICE=5FREQUEST=5FPARTITION		=3D 0x04,	// partition changes 
> 	B=5FDEVICE=5FREQUEST=5FDEVICE			=3D 0x10,	// device changes (media 
> changes)
> 	B=5FDEVICE=5FREQUEST=5FDEVICE=5FLIST	=3D 0x20,	// device additions/
> removals
> 	B=5FDEVICE=5FREQUEST=5FJOBS			=3D 0x40, // job addition/initiation/
> completion
> 	B=5FDEVICE=5FREQUEST=5FALL			=3D 0xff,	// all events
> };
> 
> // notification message "event" field values
> enum {
> 	B=5FDEVICE=5FMOUNT=5FPOINT=5FMOVED,			// mount point moved/renamed
> 	B=5FDEVICE=5FPARTITION=5FMOUNTED,			// partition mounted
> 	B=5FDEVICE=5FPARTITION=5FUNMOUNTED,		// partition unmounted
> 	B=5FDEVICE=5FPARTITION=5FINITIALIZED,		// partition initialized
> 	B=5FDEVICE=5FPARTITION=5FRESIZED,			// partition resized
> 	B=5FDEVICE=5FPARTITION=5FMOVED,			// partition moved
> 	B=5FDEVICE=5FPARTITION=5FCREATED,			// partition created
> 	B=5FDEVICE=5FPARTITION=5FDELETED,			// partition deleted
> 	B=5FDEVICE=5FPARTITION=5FDEFRAGMENTED,	// partition defragmented
> 	B=5FDEVICE=5FPARTITION=5FREPAIRED,		// partition repaired
> 	B=5FDEVICE=5FMEDIA=5FCHANGED,				// media changed
> 	B=5FDEVICE=5FADDED,						// device added
> 	B=5FDEVICE=5FREMOVED,					// device removed
> 	B=5FDEVICE=5FJOB=5FADDED,					// job added
> 	B=5FDEVICE=5FJOB=5FINITIATED,				// job initiated
> 	B=5FDEVICE=5FJOB=5FFINISHED,				// job finished
> };

	B=5FDEVICE=5FJOB=5FPROGRESS,				// job progress

Good idea or not=3F Another event mask flag may be sensible to be added -
- though the disk=5Fdevice=5Fmanager should filter the progress 
notifications issued by the module anyway, so that not more than 10 or 
so per second are sent.

> 
> class BDiskDeviceRoster {
> public:
> 	status=5Ft GetNextActiveJob(BDiskDeviceJob *job);
> 	status=5Ft RewindActiveJobs();
> };
> 
> I added job watching in with the rest of the watching codes instead 
> of 
> adding a new set of functions for it (they also have their own 
> filter). 
> I also expanded B=5FDEVICE=5FPARTITION=5FCHANGED to be a specific code for 
> each type of change (initialize, resize, move, defrag, repair), since 
> we have specific functions for those everywhere else. And as you now 
> see, I added defragging and repairing to the API, too. So there are 
> also these additions:
> 
> class BPartition {
> public:
> 	bool CanDefragment() const;
> 	status=5Ft Defragment() const;
> 	
> 	bool CanRepair(bool checkOnly) const;
> 	status=5Ft Repair(bool checkOnly) const;
> };
> 
> class BDiskSystem {
> public:
> 	bool SupportsDefragmenting(BPartition *partition) const;
> 	bool SupportsRepairing(BPartition *partition, bool checkOnly) 
> const;
> };
> 
> Sound okay=3F

I suppose `repair' means something like chkbfs=3F Parameters might be 
useful in this case, i.e. a parameter editor method could be added.

CU, Ingo
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.