ROADMAP revision cdc56e100a8fa11e989d1633914502db1c8e0818
f743002678eb67b99bbc29fee116b65d9530fec0wroweAPACHE 2.x ROADMAP:
80833bb9a1bf25dcf19e814438a4b311d2e1f4cffuankg
92108a6c4fd7ca6e9acc94d2485920436763e491sfLast modified at [$Date: 2002/10/01 13:55:00 $]
a511a29faf2ff7ead3b67680154a624effb31aafminfrin
a511a29faf2ff7ead3b67680154a624effb31aafminfrinDEFERRRED FOR APACHE 2.1
a511a29faf2ff7ead3b67680154a624effb31aafminfrin
a511a29faf2ff7ead3b67680154a624effb31aafminfrin * Source code should follow style guidelines.
a511a29faf2ff7ead3b67680154a624effb31aafminfrin OK, we all agree pretty code is good. Probably best to clean this
a7584fbbf39ae6a78586ed038d80c31b14ce5461minfrin up by hand immediately upon branching a 2.1 tree.
a7584fbbf39ae6a78586ed038d80c31b14ce5461minfrin Status: Justin volunteers to hand-edit the entire source tree ;)
a7584fbbf39ae6a78586ed038d80c31b14ce5461minfrin
a7584fbbf39ae6a78586ed038d80c31b14ce5461minfrin Justin says:
9ea14ade0d235bec11e6c221b888a6630a0be849covener Recall when the release plan for 2.0 was written:
9ea14ade0d235bec11e6c221b888a6630a0be849covener Absolute Enforcement of an "Apache Style" for code.
9ea14ade0d235bec11e6c221b888a6630a0be849covener Watch this slip into 3.0.
4860eae0821bbdf3e0da78be7b4057ebed5d86e4minfrin
4860eae0821bbdf3e0da78be7b4057ebed5d86e4minfrin David says:
4860eae0821bbdf3e0da78be7b4057ebed5d86e4minfrin The style guide needs to be reviewed before this can be done.
5b6a4b0e8d6d52394b68b51e0fa439d0eee16e37minfrin http://httpd.apache.org/dev/styleguide.html
5b6a4b0e8d6d52394b68b51e0fa439d0eee16e37minfrin The current file is dated April 20th 1998!
5b6a4b0e8d6d52394b68b51e0fa439d0eee16e37minfrin
5b6a4b0e8d6d52394b68b51e0fa439d0eee16e37minfrin OtherBill offers:
2344a0c1817b88b6df61fc4ed0c6af66bb93ee6bjim It's survived since '98 because it's welldone :-) Suggest we
2344a0c1817b88b6df61fc4ed0c6af66bb93ee6bjim simply follow whatever is documented in styleguide.html as we
2344a0c1817b88b6df61fc4ed0c6af66bb93ee6bjim branch the next tree. Really sort of straightforward, if you
63921358ef93fcb41bc71d9894221ba3d7fbb87bminfrin dislike a bit within that doc, bring it up on the dev@httpd
63921358ef93fcb41bc71d9894221ba3d7fbb87bminfrin list prior to the next branch.
63921358ef93fcb41bc71d9894221ba3d7fbb87bminfrin
63921358ef93fcb41bc71d9894221ba3d7fbb87bminfrin
63921358ef93fcb41bc71d9894221ba3d7fbb87bminfrinWORKS IN PROGRESS (PERHAPS DEFERRED FOR 2.1 or 3.0)
bbb08feeeef547b0908b16df6cbbb65da656b86fminfrin
bbb08feeeef547b0908b16df6cbbb65da656b86fminfrin * revamp the input filter syntax to provide for ordering of
bbb08feeeef547b0908b16df6cbbb65da656b86fminfrin filters created with the Set{Input|Output}Filter and the
bbb08feeeef547b0908b16df6cbbb65da656b86fminfrin Add{Input|Output}Filter directives. A 'relative to filterx'
eee20257a5ee9228f4aecdf3d3ca68fd0683ff07minfrin syntax is definately preferable.
eee20257a5ee9228f4aecdf3d3ca68fd0683ff07minfrin
eee20257a5ee9228f4aecdf3d3ca68fd0683ff07minfrin * Platforms that do not support fork (primarily Win32 and AS/400)
eee20257a5ee9228f4aecdf3d3ca68fd0683ff07minfrin Architect start-up code that avoids initializing all the modules
eee20257a5ee9228f4aecdf3d3ca68fd0683ff07minfrin in the parent process on platforms that do not support fork.
eee20257a5ee9228f4aecdf3d3ca68fd0683ff07minfrin
eee20257a5ee9228f4aecdf3d3ca68fd0683ff07minfrin . Better yet - not only inform the startup of which phase it's in,
decb536ebd4b7b94c7450c2e1daa491943135abdminfrin but allow the parent 'process' to initialize shared memory, etc,
decb536ebd4b7b94c7450c2e1daa491943135abdminfrin and create a module-by-module stream to pass to the child, so the
decb536ebd4b7b94c7450c2e1daa491943135abdminfrin parent can actually arbitrate the important stuff.
decb536ebd4b7b94c7450c2e1daa491943135abdminfrin
2d2c5cedd0559093c6e88bd92702e369ef949336minfrin * Replace stat [deferred open] with open/fstat in directory_walk.
2d2c5cedd0559093c6e88bd92702e369ef949336minfrin Justin, Ian, OtherBill all interested in this. Implies setting up
2d2c5cedd0559093c6e88bd92702e369ef949336minfrin the apr_file_t member in request_rec, and having all modules use
2d2c5cedd0559093c6e88bd92702e369ef949336minfrin that file, and allow the cleanup to close it [if it isn't a shared,
2d2c5cedd0559093c6e88bd92702e369ef949336minfrin cached file handle.]
2b82678319a66fd9caad8827ca9b38d2412a5abdminfrin
2b82678319a66fd9caad8827ca9b38d2412a5abdminfrin * The Async Apache Server implemented in terms of APR.
c0da461d68518e8f89f4070a709ba1e56381247cminfrin [Bill Stoddard's pet project.]
c0da461d68518e8f89f4070a709ba1e56381247cminfrin Message-ID: <008301c17d42$9b446970$01000100@sashimi> (dev@apr)
c0da461d68518e8f89f4070a709ba1e56381247cminfrin
797fb211307298a8a6984c0edc0d8972b35eeac1minfrin OtherBill notes that this can proceed in two parts...
797fb211307298a8a6984c0edc0d8972b35eeac1minfrin
797fb211307298a8a6984c0edc0d8972b35eeac1minfrin Async accept, setup, and tear-down of the request
797fb211307298a8a6984c0edc0d8972b35eeac1minfrin e.g. dealing with the incoming request headers, prior to
f27c90ecdefe634bd5f9c529d8658d3a3b441303minfrin dispatching the request to a thread for processing.
f27c90ecdefe634bd5f9c529d8658d3a3b441303minfrin This doesn't need to wait for a 2.x/3.0 bump.
f27c90ecdefe634bd5f9c529d8658d3a3b441303minfrin
80cabec6752622e0db5421af61502bfda95715eaminfrin Async delegation of the entire request processing chain
80cabec6752622e0db5421af61502bfda95715eaminfrin Too many handlers use stack storage and presume it is
80cabec6752622e0db5421af61502bfda95715eaminfrin available for the life of the request, so a complete
a2e1bbb77dd09c6a60f2dc18f831000e49add31eminfrin async implementation would need to happen 3.0 release.
a2e1bbb77dd09c6a60f2dc18f831000e49add31eminfrin
a2e1bbb77dd09c6a60f2dc18f831000e49add31eminfrin * Add a string "class" that combines a char* with a length
a2e1bbb77dd09c6a60f2dc18f831000e49add31eminfrin and a reference count. This will help reduce the number
a2e1bbb77dd09c6a60f2dc18f831000e49add31eminfrin of strlen and strdup operations during request processing.
a2e1bbb77dd09c6a60f2dc18f831000e49add31eminfrin Including both the length and allocation will save us a ton
deec48c67d4786bc77112ffbf3a4e70b931097edminfrin of reallocation we do today, in terms of string manipulation.
deec48c67d4786bc77112ffbf3a4e70b931097edminfrin
deec48c67d4786bc77112ffbf3a4e70b931097edminfrin OtherBill asks if this is really an APR issue, not an HTTPD issue?
deec48c67d4786bc77112ffbf3a4e70b931097edminfrin
6d601599d3d65df0410eae6e573e75b2dbfb1fb4minfrin
6d601599d3d65df0410eae6e573e75b2dbfb1fb4minfrinMAKING APACHE REPOSITORY-AGNOSTIC
6d601599d3d65df0410eae6e573e75b2dbfb1fb4minfrin(or: remove knowledge of the filesystem)
6d601599d3d65df0410eae6e573e75b2dbfb1fb4minfrin
40d570cf1420f497bcac59045d4ce477f0b5d891minfrin[ 2002/10/01: discussion in progress on items below; this isn't
40d570cf1420f497bcac59045d4ce477f0b5d891minfrin planned yet ]
40d570cf1420f497bcac59045d4ce477f0b5d891minfrin
edab53cc0be707fa71968a95c696b19f0e6c4736minfrin * dav_resource concept for an HTTP resource ("ap_resource")
edab53cc0be707fa71968a95c696b19f0e6c4736minfrin
edab53cc0be707fa71968a95c696b19f0e6c4736minfrin * r->filename, r->canonical_filename, r->finfo need to
806e9ba570ef48df4bfd8364e2f4d57381388a11minfrin disappear. All users need to use new APIs on the ap_resource
806e9ba570ef48df4bfd8364e2f4d57381388a11minfrin object.
806e9ba570ef48df4bfd8364e2f4d57381388a11minfrin
806e9ba570ef48df4bfd8364e2f4d57381388a11minfrin (backwards compat: today, when this occurs with mod_dav and a
806e9ba570ef48df4bfd8364e2f4d57381388a11minfrin custom backend, the above items refer to the topmost directory
0754dde4b645ccd88fdb6c2961c0bdd7b213bdbaminfrin mapped by a location; e.g. docroot)
0754dde4b645ccd88fdb6c2961c0bdd7b213bdbaminfrin
0754dde4b645ccd88fdb6c2961c0bdd7b213bdbaminfrin Need to preserve a 'filename'-like string for mime-by-name
a4273e3e513ce8f5e1311c320cbd334cc382950eminfrin sorts of operations. But this only needs to be the name itself
a4273e3e513ce8f5e1311c320cbd334cc382950eminfrin and not a full path.
a4273e3e513ce8f5e1311c320cbd334cc382950eminfrin
d3e0a61e1bcc497f2efd7af41a5a9d77090ecc1cminfrin * The translate_name hook goes away
a4273e3e513ce8f5e1311c320cbd334cc382950eminfrin
d3e0a61e1bcc497f2efd7af41a5a9d77090ecc1cminfrin Wrowe altogether disagrees. translate_name today even operates
d3e0a61e1bcc497f2efd7af41a5a9d77090ecc1cminfrin on URIs ... this mechansim needs to be preserved.
1aac1c71105133d669960501bdf2274e63561054minfrin
1aac1c71105133d669960501bdf2274e63561054minfrin * The doc for map_to_storage is totally opaque to me. It has
1aac1c71105133d669960501bdf2274e63561054minfrin something to do with filesystems, but it also talks about
2c487ac43b583db869e743772a7a10b278aa2bcfminfrin security and per_dir_config and other stuff. I presume something
2c487ac43b583db869e743772a7a10b278aa2bcfminfrin needs to happen there -- at least better doc.
2c487ac43b583db869e743772a7a10b278aa2bcfminfrin
2c487ac43b583db869e743772a7a10b278aa2bcfminfrin Wrowe agrees and will write it up.
2c487ac43b583db869e743772a7a10b278aa2bcfminfrin
dbf5f584c62fe6030d81121fdddeb7588b78b867sf * The directory_walk concept disappears. All configuration is
dbf5f584c62fe6030d81121fdddeb7588b78b867sf tagged to Locations. The "mod_filesystem" module might have some
15320dc646e41d3eb38736978500349c4d66dc0dsf internal concept of the same config appearing in multiple
15320dc646e41d3eb38736978500349c4d66dc0dsf places, but that is handled internally rather than by Apache
691db92094897494d6c31326108da20088bc175etrawick core.
691db92094897494d6c31326108da20088bc175etrawick
691db92094897494d6c31326108da20088bc175etrawick Wrowe suggests this is wrong, instead it's private to filesystem
92108a6c4fd7ca6e9acc94d2485920436763e491sf requests, and is already invoked from map_to_storage, not the core
92108a6c4fd7ca6e9acc94d2485920436763e491sf handler. <Directory > and <Files > blocks are preserved as-is,
684e0cfc200f66287a93bbd1708d1dd8a92a7eefcovener but <Directory > sections become specific to the filesystem handler
684e0cfc200f66287a93bbd1708d1dd8a92a7eefcovener alone. Because alternate filesystem schemes could be loaded, this
684e0cfc200f66287a93bbd1708d1dd8a92a7eefcovener should be exposed, from the core, for other file-based stores to
5c43d2fb853f84497b5ece2d414ef9484aa87e5fsf share. Consider an archive store where the layers become
05a5a9c3e16f21566e1b61f4bd68025ce1b741ccjoes <Directory path> -> <Archive store> -> <File name>
05a5a9c3e16f21566e1b61f4bd68025ce1b741ccjoes
ef82e8fa164e0a1f8b813f7deb6b7ead96018c94niq * The "Location tree" is an in-memory representation of the URL
26c5829347f6a355c00f1ba0301d575056b69536niq namespace. Nodes of the tree have configuration specific to that
ef82e8fa164e0a1f8b813f7deb6b7ead96018c94niq location in the namespace.
ef82e8fa164e0a1f8b813f7deb6b7ead96018c94niq
ef82e8fa164e0a1f8b813f7deb6b7ead96018c94niq Something like:
ef82e8fa164e0a1f8b813f7deb6b7ead96018c94niq
ef82e8fa164e0a1f8b813f7deb6b7ead96018c94niq typedef struct {
ef82e8fa164e0a1f8b813f7deb6b7ead96018c94niq const char *name; /* name of this node relative to parent */
413ee814748f37be168ff12407fa6dba0ceeabe6trawick
c12917da693bae4028a1d5a5e8224bceed8c739dsf struct ap_conf_vector_t *locn_config;
c12917da693bae4028a1d5a5e8224bceed8c739dsf
eeb7898b9c087040d44550f8a6b1a257783c9f0ahumbedooh apr_hash_t *children; /* NULL if no child configs */
eeb7898b9c087040d44550f8a6b1a257783c9f0ahumbedooh } ap_locn_node;
7705103518c61f7cdcd4041fe871cb45114f31a5rpluem
eafcc0ebf263d0ba69855b6e10958c4c1a2361bdsf The following config:
eafcc0ebf263d0ba69855b6e10958c4c1a2361bdsf
eafcc0ebf263d0ba69855b6e10958c4c1a2361bdsf <Location /server-status>
eafcc0ebf263d0ba69855b6e10958c4c1a2361bdsf SetHandler server-status
eafcc0ebf263d0ba69855b6e10958c4c1a2361bdsf Order deny,allow
d7ffd2da16d58b1a0de212e4d56f7aebb72bef26sf Deny from allo
d7ffd2da16d58b1a0de212e4d56f7aebb72bef26sf Allow from 127.0.0.1
d7ffd2da16d58b1a0de212e4d56f7aebb72bef26sf </Location>
4576c1a9ef54cd1e5555ee07d016a7f559f80338sf
4576c1a9ef54cd1e5555ee07d016a7f559f80338sf Creates a node with name=="server_status", and the node is a
4576c1a9ef54cd1e5555ee07d016a7f559f80338sf child of the "/" node. (hmm. node->name is redundant with the
9811aed12bbc71783d2e544ccb5fecd193843eadsf hash key; maybe drop node->name)
9811aed12bbc71783d2e544ccb5fecd193843eadsf
9811aed12bbc71783d2e544ccb5fecd193843eadsf In the config vector, mod_access has stored its Order, Deny, and
d58a822aff1dfda25384d3d009f88f1883c95436kbrand Allow configs. mod_core has stored the SetHandler.
d58a822aff1dfda25384d3d009f88f1883c95436kbrand
d58a822aff1dfda25384d3d009f88f1883c95436kbrand During the Location walk, we merge the config vectors normally.
e02ff627c1e63137247e20493f6ef44b3bb1a095sf
e02ff627c1e63137247e20493f6ef44b3bb1a095sf Note that an Alias simply associates a filesystem path (in
e02ff627c1e63137247e20493f6ef44b3bb1a095sf mod_filesystem) with that Location in the tree. Merging
1366443dc565c33e7b449ae428bbfc4c86f33935drh continues with child locations, but a merge is never done
1366443dc565c33e7b449ae428bbfc4c86f33935drh through filesystem locations. Config on a specific subdir needs
88fac54d9d64f85bbdab5d7010816f4377f95bd7rjung to be mapped back into the corresponding point in the Location
88fac54d9d64f85bbdab5d7010816f4377f95bd7rjung tree for proper merging.
bd3f5647b96d378d9c75c954e3f13582af32c643sf
bd3f5647b96d378d9c75c954e3f13582af32c643sf * Config is parsed into a tree, as we did for the 2.0 timeframe,
bd3f5647b96d378d9c75c954e3f13582af32c643sf but that tree is just a representation of the config (for
bd3f5647b96d378d9c75c954e3f13582af32c643sf multiple runs and for in-memory manipulation and usage). It is
bd3f5647b96d378d9c75c954e3f13582af32c643sf unrelated to the "Location tree".
2a7beea91d46beb41f043a84eaad060047ee04aafabien
2a7beea91d46beb41f043a84eaad060047ee04aafabien * Calls to apr_file_io functions generally need to be replaced
2a7beea91d46beb41f043a84eaad060047ee04aafabien with operations against the ap_resource. For example, rather
2a7beea91d46beb41f043a84eaad060047ee04aafabien than calling apr_dir_open/read/close(), a caller uses
584a85dd4047e38d3ed3a29b6662fcc9d100ae4csf resource->repos->get_children() or somesuch.
584a85dd4047e38d3ed3a29b6662fcc9d100ae4csf
584a85dd4047e38d3ed3a29b6662fcc9d100ae4csf Note that things like mod_dir, mod_autoindex, and mod_negotation
f21e9e3d0bfb7a507ecc5bc963f2159d693503d1sf need to be converted to use these mechanisms so that their
f21e9e3d0bfb7a507ecc5bc963f2159d693503d1sf functions will work on logical repositories rather than just
f21e9e3d0bfb7a507ecc5bc963f2159d693503d1sf filesystems.
f6b9c755a0b793e8a3a3aebd327ca20a86478117sf