[DEV] open new 1.5 development branch
This new branch is based on 1.4.6, which 1.5-dev0 is 100% equivalent to.
The roadmap has been updated.
diff --git a/ROADMAP b/ROADMAP
index f5c638f..2231716 100644
--- a/ROADMAP
+++ b/ROADMAP
@@ -1,112 +1,99 @@
-'+' = done, '-' = todo, '*' = done except doc
+Medium-long term roadmap - 2010/04/10
-1.2.12 :
- + weighted RR/SH
+Legend: '+' = done, '-' = todo, '*' = done except doc
-1.2.13 :
- + maxconn
- + queueing
+1.5 (ETA 2010/12/31) :
+ - server-side HTTP keepalive
-1.2.14 :
- + HTML status page
+ - return-html code xxx [ file "xxx" | text "xxx" ] if <acl>
- stats enable
- stats uri /?stats
- stats realm w.ods.org\ statistics
- stats auth user1:pass1
- stats auth user2:pass2
- stats auth user3:pass3
- stats scope <px_id> | '.'
+ - return-raw [ file "xxx" | text "xxx" ] if <acl>
- + allow server-less proxies (for stats)
+ - add support for client-side and server-side unix sockets
- - separate timeout controls
+ - try to remove srv==NULL internally and assign a dummy server to each backend
+ for dispatch, http_proxy and transparent modes.
- + option 'abortonclose' : if the session is queued or being connecting
- to the server, and the client sends a shutdown(), then decide to abort
- the session early because in most situations, this will be caused by
- a client hitting the 'Stop' button, so there's no reason to overload
- the servers with unservable requests. However, this is not HTTP compliant
- and might cause little trouble to some very specific clients used to
- close immediately after sending the request (no support for KA, which ones?)
+ - rename L4 acls as L6 ACLs when some content is involved
- + minconn : makes the server's maxconn dynamic, which will be computed as a
- ratio of the proxy's sessions :
- srv->effective_maxconn =
- max(srv->maxconn * px->nbsess / px->maxconn, srv->minconn)
+ - add new L4 ACL checks immediately after accept, before even allocating the
+ buffers ("connection {accept|reject|delay|freeze} {if|unless}").
-1.2.15 :
- + monitor-uri : specify an URI for which we will always return 'HTTP/1.0 200'
- and never forward nor log it.
+ - implement support for "connection freeze" after accept. A list of frozen
+ connections should be maintained so that it is possible to recycle them
+ when new file descriptors are required.
- + option ssl-hello-chk : send SSLv3 client hello messages to check the servers
+ - support for time-ordered priority queues with ability to add an offset
+ based on request matching. Each session will have one ebtree node to be
+ attached to whatever queue the session is waiting in.
-1.3 :
- - remove unused STATTIME
+ - assign a nice priority based on ACLs.
- - reference all the include files that must be created, possibly under subdirs :
+ - pattern extraction is needed for ACLs and stickiness. It would work like
+ this :
- - acl.h => more general ACL work
- - appcook.h => appsession-related cookies
- - backend.h => back-end part of the PR_O_* + backend definitions
- - buffers.h => buffer management relying on memory.h
- - capture.h => header and cookie capture
- - cfgparse.h => configuration parser
- - checks.h => health checks
- - clireq.h => the client side "request" part of the current sessions.
- - compat.h => compatibility with other OSes (TCP_NODELAY, ...)
- - config.h => config parameters, renamed CONFIG_HAP_*, includes defaults.h
- - controls.h => SN_CACHEABLE, ...
- - cookies.h => definitions related to cookie management + SN_SCK_*
- - defaults.h => many default values, might disappear soon after cleanup
- - frontend.h => front-end part of the PR_O_* + client definitions + listeners
- - global.h => shared global variables
- - http.h => HTTP state definitions and transitions
- - httperr.{hc} => HTTP return codes
- - libtask.h => task scheduler
- - libtime.h => time-related definitions
- - loadbal.h => load balancing algorithms
- - log.h => log definitions
- - memory.h => pools
- - polling.h => definitions of select(), poll(), INTBITS, ...
- - queue.h => queue management
- - regex.h => filtering
- - servers.h => servers definitions (SRV_*, states, ...)
- - fd.h => FD_ST* (add FD_DGRAM), RES_*, socket states, etc...
- - srvreq.h => the server side "request" part of the current sessions.
- - standard.h => general purpose macros and defines (eg: MIN/MAX, ...)
- - startup.h => MODE_*
- - tuning.h => platform-specific tuning parameters
+ acl <name> <pattern> [-i] <values>...
+ All ACL fetch method currently available would be transformed into pattern
+ extraction methods. That way we could stick on hdr(x-forwarded-for) or use
+ source 0.0.0.0 usesrc <pattern> (such as "hdr_ip(headername)"). Note that
+ ACLs sometimes need iterative matching/extraction.
- - clarify licence by adding a 'MODULE_LICENCE("GPL")' or something equivalent.
+ - add support for complex pattern extraction rules :
- - handle half-closed connections better (cli/srv would not distinguish
- DATA/SHUTR/SHUTW, it would be a session flag which would tell shutr/shutw).
- Check how it got changed in httpterm.
+ pattern = <pattern_term>
+ | '{' pattern_expr '}'
- - 3 memory models : failsafe (prealloc), normal (current), optimal (alloc on
- demand)
+ pattern_expr = <pattern_term> [ <transform> ... ]
- - wait queues replaced for priority-based trees
+ - support loading data sets from files
+ + present/not present (eg: netmasks)
+ - pattern conversion per prefixes. Eg: convert src IP to country.
- - ability to assign a prio based on L7 matching
+ - make new patterns available based on stickiness matching :
+ - number of entries in table for the matched pattern
+ - same after having increased the match counter
- - prio-based O(1) scheduler
+ - add support for concurrency match in tables
+ - just like stickiness, but counted per session (or request), increased
+ on first match and decreased at end of request or connection. This
+ requires that the session has a list of matched terms that must be
+ released at the end.
- - maxconn reserve for VIP/admins
+1.6 (will probably change anyway) :
+ - wait on resource (mem, socket, server's conn, server's rate, ...)
- - verify if it would be worth implementing an epoll_ctl_batch() for Linux
+ - bandwidth limits
- - balance LC/WLC (patch available)
+ - create internal services and make stats, CLI, etc... part of that.
- - option minservers XXX : activates some backup servers when active servers
- are insufficient
+ - use_server ... if ...
+
+ - buddy servers to build defined lists of failovers. Detect loops during
+ the config check.
+
+ server XXX buddy YYY
+ server YYY # may replace XXX when XXX fails
+
+ - spare servers : servers which are used in LB only when a minimum farm
+ weight threshold is not satisfied anymore. Useful for inter-site LB with
+ local pref by default.
+
- - monitor minservers XXX : monitor-net and monitor-uri could report a failure
- when the number of active servers is below this threshold.
+Old, maybe obsolete points
+ - clarify licence by adding a 'MODULE_LICENCE("GPL")' or something equivalent.
+
+ - 3 memory models : failsafe (prealloc), normal (current), optimal (alloc on
+ demand)
+
+ - ability to assign a task priority based on L7 matching
- - option smtp-chk : use SMTP health checks (avoid logs if possible)
+ - implement support for event-triggerred epoll()
+
+ - verify if it would be worth implementing an epoll_ctl_batch() for Linux
+
+ - option minservers XXX : activates some spare servers when active servers
+ are insufficient
- new keyword 'check' : check http xxx, check smtp xxx, check ssl-hello