Hi all,
As mentioned on the E4 call today, I'd like to bring up
the
idea of "lazy resources" once
again.
I had mentioned this at the end of my E-Mail on Oct 7
already,
but it was somehow hidden beneath the other
stuff.
The background is, I noticed that we were talking about
pushing
down a variety of stuff from the Resource layer into the
File
System Layer. Which
might work for some stuff (like meta info,
and markers though I'd not be sure about the life cycle of
markers
when a file gets renamed) and certainly won't work for others
such
as delta notifications (which just won't work without
state).
So I was wondering
why we don't do it the other way round,
and
allow a kind of
IResource that is more loosely connected to the
Workspace (by
means of having been visited before, like with an
external editor),
and that's not eagerly refreshed like the
resources
we know in the
workspace.
Today, Resources
are problematic with EFS-shared slow, remote,
huge file systems
sice the eager deep refresh would generate
masses of data
that's not necessary. We should think about a
kind (flag) of
IResource that's more loosely connected to the
Workspace.
Does that make
sense? - McQ argued that he's concerned about
making the
(currently easily understood) resource model overly
complex, and about
unclear user experience with such afeature.
I could imagine
using Lazy Resources for
* Object
files when no incremental build is desired
(we don't
care about update notifications in this case)
* Static, frozen,
read-only reference file systems where we
*know*
nothing will change
In some sense,
such a lazy resource is nothing other than
a Linked Resource
to a file in a hidden project. Could we
solve this in a
more elegant manner?
Discussion is
opened, any thoughts?
Cheers,
--
Martin Oberhuber, Senior Member of Technical
Staff, Wind River
Target Management
Project Lead, DSDP PMC Member
Hi all,
I had some thoughts about the Strawman proposal, and the file
system
layer in particular.
-
We
have a requirement to extend usability of Eclipse tools beyond the
Workspace. Bugs are open which request, for instance, capabilities to
Search files and folders outside the workspace, open editors, add markers,
... apparently, we'll want to do all that on the Filesystem
layer.
-
Given that, the Filesystem layer must be
stateless (we cannot maintain state in memory for a tree that
can become arbitrarily large, since that wouldn't scale). The Filesystem
layer must take its information from the filesystem alone, and nowhere
else. Which seems to tie in nicely with ideas of having the FS layer
RESTful.
-
If
the Filesystem layer is stateless, we cannot push down any
resource deltas, since these require state ("before" vs
"after" the change). The Resources (Project) layer would remain the one
which holds state just as it does today.
-
I
like the idea of pushing down metadata such that
(a) markers can live outside the workspace on FS objects, and (b) file
system capabilities for storing metadata such as Encoding or content type
can be leveraged. Perhaps that metadata layer could even be
totally separate from both FS Layer and Resource layer, linked
with them through URI as the identifier, and some resource delta callbacks
for lifecycle management. The other option is to leave it with the
Resource layer, but make it lazy (see below).
-
This brings up the question, where we really need to beef up
the FS layer? I actually don't see much need for this, except for
(a)
adding asynchronous support if needed ... though that
brings up other questions (see my other E-Mail), and
(b) adding an
IFileStore#getCanonicalPath() API which we clearly need
for Alias resolution.
-
I
think that we can not have full Alias Management on the FS
Layer, because:
1.) one requirement of Alias management
is that given some file X, you need to know "who else links to X?".
2.)
Now that kind of "reverse lookup" of symbolic links is not supported
by file systems, so it must be solved in code.
3.) That, again,
requires that clients have "expressed interest" in X before, which is
adding state to the file system, which we cannot have on the FS
layer.
I think that we need to keep Alias Management on the
Resource/Project layer, supported by the getCanonicalPath() API on the FS
layer. In order to still support Alias Management for items outside the
workspace (that have been looked at before), we'll probably want some
"lazy addition to Workspace" paradigm which adds files
and folders to the workspace as they are being visited (and probably
removes them again after some time with an LRU
paradigm).
Now that being said, it looks for me as if the necessary
enhancements on the FS layer could even be done in the Eclipse 3.5 Stream
(adding IFileStore#getCanonicalPath()).
Or am I missing any requirements on the FS
Layer?
Cheers,
--
Martin Oberhuber, Senior Member of
Technical Staff, Wind
River
Target Management
Project Lead, DSDP PMC Member
.