ROADMAP revision 29b927351fa38aca768d31d70116acd0a71ed415
0N/AAPACHE 2.x ROADMAP:
0N/A
0N/ALast modified at [$Date: 2002/10/01 15:44:35 $]
0N/A
0N/ADEFERRRED FOR APACHE 2.1
0N/A
0N/A * Source code should follow style guidelines.
0N/A OK, we all agree pretty code is good. Probably best to clean this
0N/A up by hand immediately upon branching a 2.1 tree.
0N/A Status: Justin volunteers to hand-edit the entire source tree ;)
0N/A
0N/A Justin says:
0N/A Recall when the release plan for 2.0 was written:
0N/A Absolute Enforcement of an "Apache Style" for code.
0N/A Watch this slip into 3.0.
0N/A
0N/A David says:
0N/A The style guide needs to be reviewed before this can be done.
873N/A http://httpd.apache.org/dev/styleguide.html
0N/A The current file is dated April 20th 1998!
0N/A
0N/A OtherBill offers:
0N/A It's survived since '98 because it's welldone :-) Suggest we
0N/A simply follow whatever is documented in styleguide.html as we
3215N/A branch the next tree. Really sort of straightforward, if you
0N/A dislike a bit within that doc, bring it up on the dev@httpd
0N/A list prior to the next branch.
0N/A
0N/A
0N/AWORKS IN PROGRESS (PERHAPS DEFERRED FOR 2.1 or 3.0)
107N/A
1795N/A * revamp the input filter syntax to provide for ordering of
1795N/A filters created with the Set{Input|Output}Filter and the
0N/A Add{Input|Output}Filter directives. A 'relative to filterx'
0N/A syntax is definately preferable.
0N/A
107N/A * Platforms that do not support fork (primarily Win32 and AS/400)
0N/A Architect start-up code that avoids initializing all the modules
1726N/A in the parent process on platforms that do not support fork.
0N/A
1514N/A . Better yet - not only inform the startup of which phase it's in,
3363N/A but allow the parent 'process' to initialize shared memory, etc,
0N/A and create a module-by-module stream to pass to the child, so the
0N/A parent can actually arbitrate the important stuff.
2187N/A
0N/A * Replace stat [deferred open] with open/fstat in directory_walk.
0N/A Justin, Ian, OtherBill all interested in this. Implies setting up
0N/A the apr_file_t member in request_rec, and having all modules use
421N/A that file, and allow the cleanup to close it [if it isn't a shared,
1280N/A cached file handle.]
3363N/A
3363N/A * The Async Apache Server implemented in terms of APR.
3363N/A [Bill Stoddard's pet project.]
3363N/A Message-ID: <008301c17d42$9b446970$01000100@sashimi> (dev@apr)
2086N/A
107N/A OtherBill notes that this can proceed in two parts...
0N/A
338N/A Async accept, setup, and tear-down of the request
0N/A e.g. dealing with the incoming request headers, prior to
0N/A dispatching the request to a thread for processing.
338N/A This doesn't need to wait for a 2.x/3.0 bump.
0N/A
1726N/A Async delegation of the entire request processing chain
1795N/A Too many handlers use stack storage and presume it is
0N/A available for the life of the request, so a complete
2187N/A async implementation would need to happen 3.0 release.
0N/A
0N/A * Add a string "class" that combines a char* with a length
107N/A and a reference count. This will help reduce the number
0N/A of strlen and strdup operations during request processing.
2187N/A Including both the length and allocation will save us a ton
0N/A of reallocation we do today, in terms of string manipulation.
1280N/A
2086N/A OtherBill asks if this is really an APR issue, not an HTTPD issue?
2086N/A
536N/A
0N/AMAKING APACHE REPOSITORY-AGNOSTIC
1060N/A(or: remove knowledge of the filesystem)
2187N/A
2187N/A[ 2002/10/01: discussion in progress on items below; this isn't
2187N/A planned yet ]
2187N/A
0N/A * dav_resource concept for an HTTP resource ("ap_resource")
0N/A
0N/A * r->filename, r->canonical_filename, r->finfo need to
0N/A disappear. All users need to use new APIs on the ap_resource
0N/A object.
0N/A
0N/A (backwards compat: today, when this occurs with mod_dav and a
0N/A custom backend, the above items refer to the topmost directory
2187N/A mapped by a location; e.g. docroot)
0N/A
0N/A Need to preserve a 'filename'-like string for mime-by-name
0N/A sorts of operations. But this only needs to be the name itself
0N/A and not a full path.
0N/A
0N/A Justin: Can we leverage the path info, or do we not trust the user?
0N/A
0N/A * The translate_name hook goes away
0N/A
0N/A Wrowe altogether disagrees. translate_name today even operates
0N/A on URIs ... this mechansim needs to be preserved.
0N/A
0N/A * The doc for map_to_storage is totally opaque to me. It has
1795N/A something to do with filesystems, but it also talks about
0N/A security and per_dir_config and other stuff. I presume something
0N/A needs to happen there -- at least better doc.
0N/A
1727N/A Wrowe agrees and will write it up.
0N/A
0N/A * The directory_walk concept disappears. All configuration is
0N/A tagged to Locations. The "mod_filesystem" module might have some
0N/A internal concept of the same config appearing in multiple
0N/A places, but that is handled internally rather than by Apache
0N/A core.
891N/A
0N/A Wrowe suggests this is wrong, instead it's private to filesystem
0N/A requests, and is already invoked from map_to_storage, not the core
0N/A handler. <Directory > and <Files > blocks are preserved as-is,
0N/A but <Directory > sections become specific to the filesystem handler
0N/A alone. Because alternate filesystem schemes could be loaded, this
1795N/A should be exposed, from the core, for other file-based stores to
891N/A share. Consider an archive store where the layers become
891N/A <Directory path> -> <Archive store> -> <File name>
891N/A
891N/A * The "Location tree" is an in-memory representation of the URL
891N/A namespace. Nodes of the tree have configuration specific to that
891N/A location in the namespace.
891N/A
891N/A Something like:
1795N/A
1795N/A typedef struct {
1795N/A const char *name; /* name of this node relative to parent */
1795N/A
891N/A struct ap_conf_vector_t *locn_config;
891N/A
891N/A apr_hash_t *children; /* NULL if no child configs */
1795N/A } ap_locn_node;
1795N/A
1795N/A The following config:
891N/A
2187N/A <Location /server-status>
2187N/A SetHandler server-status
2187N/A Order deny,allow
2187N/A Deny from all
2187N/A Allow from 127.0.0.1
2187N/A </Location>
2187N/A
2187N/A Creates a node with name=="server_status", and the node is a
2187N/A child of the "/" node. (hmm. node->name is redundant with the
2187N/A hash key; maybe drop node->name)
2187N/A
2187N/A In the config vector, mod_access has stored its Order, Deny, and
2187N/A Allow configs. mod_core has stored the SetHandler.
2187N/A
2187N/A During the Location walk, we merge the config vectors normally.
2187N/A
2187N/A Note that an Alias simply associates a filesystem path (in
2187N/A mod_filesystem) with that Location in the tree. Merging
2187N/A continues with child locations, but a merge is never done
2187N/A through filesystem locations. Config on a specific subdir needs
2187N/A to be mapped back into the corresponding point in the Location
2187N/A tree for proper merging.
2187N/A
2187N/A * Config is parsed into a tree, as we did for the 2.0 timeframe,
2187N/A but that tree is just a representation of the config (for
2187N/A multiple runs and for in-memory manipulation and usage). It is
2187N/A unrelated to the "Location tree".
2187N/A
2187N/A * Calls to apr_file_io functions generally need to be replaced
2187N/A with operations against the ap_resource. For example, rather
2187N/A than calling apr_dir_open/read/close(), a caller uses
2187N/A resource->repos->get_children() or somesuch.
2187N/A
1795N/A Note that things like mod_dir, mod_autoindex, and mod_negotation
1795N/A need to be converted to use these mechanisms so that their
1795N/A functions will work on logical repositories rather than just
1795N/A filesystems.
1795N/A
1795N/A * How do we handle CGI scripts? Especially when the resource may
1795N/A not be backed by a file? Ideally, we should be able to come up
1795N/A with some mechanism to allow CGIs to work in a
1795N/A repository-independent manner.
1795N/A
1795N/A - Writing the virtual data as a file and then executing it?
1795N/A - Can a shell be executed in a streamy manner? (Portably?)
1795N/A - Have an 'execute_resource' hook/func that allows the
1795N/A repository to choose its manner - be it exec() or whatever.
1795N/A - Won't this approach lead to duplication of code? Helper fns?
1795N/A