ROADMAP revision 27ddebab333df2a3d82b0f4ea63878d1d9f38ae8
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsyncAPACHE 2.x ROADMAP:
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsyncLast modified at [$Date: 2002/10/01 13:28:31 $]
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsyncDEFERRRED FOR APACHE 2.1
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Source code should follow style guidelines.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync OK, we all agree pretty code is good. Probably best to clean this
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync up by hand immediately upon branching a 2.1 tree.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Status: Justin volunteers to hand-edit the entire source tree ;)
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Justin says:
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Recall when the release plan for 2.0 was written:
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Absolute Enforcement of an "Apache Style" for code.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Watch this slip into 3.0.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync David says:
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync The style guide needs to be reviewed before this can be done.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync http://httpd.apache.org/dev/styleguide.html
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync The current file is dated April 20th 1998!
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync OtherBill offers:
930b5f872e89407f445d4000d4e4aaecaa6a0998vboxsync It's survived since '98 because it's welldone :-) Suggest we
930b5f872e89407f445d4000d4e4aaecaa6a0998vboxsync simply follow whatever is documented in styleguide.html as we
930b5f872e89407f445d4000d4e4aaecaa6a0998vboxsync branch the next tree. Really sort of straightforward, if you
930b5f872e89407f445d4000d4e4aaecaa6a0998vboxsync dislike a bit within that doc, bring it up on the dev@httpd
930b5f872e89407f445d4000d4e4aaecaa6a0998vboxsync list prior to the next branch.
930b5f872e89407f445d4000d4e4aaecaa6a0998vboxsync
930b5f872e89407f445d4000d4e4aaecaa6a0998vboxsync
930b5f872e89407f445d4000d4e4aaecaa6a0998vboxsyncWORKS IN PROGRESS (PERHAPS DEFERRED FOR 2.1 or 3.0)
930b5f872e89407f445d4000d4e4aaecaa6a0998vboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * revamp the input filter syntax to provide for ordering of
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync filters created with the Set{Input|Output}Filter and the
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Add{Input|Output}Filter directives. A 'relative to filterx'
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync syntax is definately preferable.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Platforms that do not support fork (primarily Win32 and AS/400)
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Architect start-up code that avoids initializing all the modules
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync in the parent process on platforms that do not support fork.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync . Better yet - not only inform the startup of which phase it's in,
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync but allow the parent 'process' to initialize shared memory, etc,
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync and create a module-by-module stream to pass to the child, so the
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync parent can actually arbitrate the important stuff.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Replace stat [deferred open] with open/fstat in directory_walk.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Justin, Ian, OtherBill all interested in this. Implies setting up
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync the apr_file_t member in request_rec, and having all modules use
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync that file, and allow the cleanup to close it [if it isn't a shared,
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync cached file handle.]
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * The Async Apache Server implemented in terms of APR.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync [Bill Stoddard's pet project.]
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Message-ID: <008301c17d42$9b446970$01000100@sashimi> (dev@apr)
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync OtherBill notes that this can proceed in two parts...
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Async accept, setup, and tear-down of the request
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync e.g. dealing with the incoming request headers, prior to
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync dispatching the request to a thread for processing.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync This doesn't need to wait for a 2.x/3.0 bump.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Async delegation of the entire request processing chain
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Too many handlers use stack storage and presume it is
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync available for the life of the request, so a complete
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync async implementation would need to happen 3.0 release.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Add a string "class" that combines a char* with a length
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync and a reference count. This will help reduce the number
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync of strlen and strdup operations during request processing.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Including both the length and allocation will save us a ton
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync of reallocation we do today, in terms of string manipulation.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync OtherBill asks if this is really an APR issue, not an HTTPD issue?
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsyncMAKING APACHE REPOSITORY-AGNOSTIC
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync(or: remove knowledge of the filesystem)
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync[ 2002/10/01: discussion in progress on items below; this isn't
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync planned yet ]
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * dav_resource concept for an HTTP resource ("ap_resource")
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * r->filename, r->canonical_filename, r->finfo need to
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync disappear. All users need to use new APIs on the ap_resource
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync object.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync (backwards compat: today, when this occurs with mod_dav and a
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync custom backend, the above items refer to the topmost directory
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync mapped by a location; e.g. docroot)
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * The translate_name hook goes away
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * The doc for map_to_storage is totally opaque to me. It has
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync something to do with filesystems, but it also talks about
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync security and per_dir_config and other stuff. I presume something
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync needs to happen there -- at least better doc.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * The directory_walk concept disappears. All configuration is
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync tagged to Locations. The "mod_filesystem" module might have some
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync internal concept of the same config appearing in multiple
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync places, but that is handled internally rather than by Apache
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync core.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * The "Location tree" is an in-memory representation of the URL
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync namespace. Nodes of the tree have configuration specific to that
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync location in the namespace.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Something like:
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync typedef struct {
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync const char *name; /* name of this node relative to parent */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync struct ap_conf_vector_t *locn_config;
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync apr_hash_t *children; /* NULL if no child configs */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync } ap_locn_node;
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync The following config:
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync <Location /server-status>
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync SetHandler server-status
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Order deny,allow
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Deny from allo
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Allow from 127.0.0.1
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync </Location>
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Creates a node with name=="server_status", and the node is a
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync child of the "/" node. (hmm. node->name is redundant with the
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync hash key; maybe drop node->name)
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync In the config vector, mod_access has stored its Order, Deny, and
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Allow configs. mod_core has stored the SetHandler.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync During the Location walk, we merge the config vectors normally.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Note that an Alias simply associates a filesystem path (in
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync mod_filesystem) with that Location in the tree. Merging
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync continues with child locations, but a merge is never done
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync through filesystem locations. Config on a specific subdir needs
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync to be mapped back into the corresponding point in the Location
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync tree for proper merging.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Config is parsed into a tree, as we did for the 2.0 timeframe,
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync but that tree is just a representation of the config (for
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync multiple runs and for in-memory manipulation and usage). It is
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync unrelated to the "Location tree".
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Calls to apr_file_io functions generally need to be replaced
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync with operations against the ap_resource. For example, rather
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync than calling apr_dir_open/read/close(), a caller uses
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync resource->repos->get_children() or somesuch.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync Note that things like mod_dir, mod_autoindex, and mod_negotation
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync need to be converted to use these mechanisms so that their
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync functions will work on logical repositories rather than just
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync filesystems.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync