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