Philippe Pepiot <ph@itsalwaysdns.eu> [Tue, 31 Mar 2020 18:22:05 +0200] rev 12966
[server] Make connection pooler configurable and set better default values
Drop the configuration connections-pool-size and add new configurations options:
* connections-pool-min-size. Set to 0 by default so we open connections only
when needed. This avoid opening min-size*processes connections at startup,
which is, it think, a good default.
* connections-pool-max-size. Set to 0 (unlimited) by default, so we move the
bottleneck to postgresql.
* connections-idle-timeout. Set to 10 minutes. I don't have arguments about
this except that this is the default in pgbouncer.
Philippe Pepiot <ph@itsalwaysdns.eu> [Tue, 31 Mar 2020 18:12:20 +0200] rev 12965
[server] Enhance connections-pooler-enabled documentation
Philippe Pepiot <ph@itsalwaysdns.eu> [Tue, 31 Mar 2020 16:17:14 +0200] rev 12964
[server] move connection pooler initialization logic to get_cnxset()
This avoid complex logic in Repository initialization.
Philippe Pepiot <ph@itsalwaysdns.eu> [Mon, 30 Mar 2020 15:46:12 +0200] rev 12963
[server] dynamically close idle database connections
When pool hasn't been empty for `idle_timeout` time, start closing connections.
Philippe Pepiot <ph@itsalwaysdns.eu> [Mon, 30 Mar 2020 15:45:40 +0200] rev 12962
[server] implement dynamic database pooler
Opening too much database connection has a cost at startup and also PostgreSQL
as a maximum number of connection (100 by default).
This get worse when starting multiple wsgi processes, since each process has
its own database pool.
Instead of opening `connections-pool-size` connections to the database at
startup, just open one and open more only when needed.
Philippe Pepiot <ph@itsalwaysdns.eu> [Mon, 30 Mar 2020 15:30:02 +0200] rev 12961
[server] use a LifoQueue in _CnxSetPool
In postgresql, some cache is attached to the connection. Using a LifoQueue
(last-in, first-out) makes a few connections to get the most load which give
best performance.
Philippe Pepiot <ph@itsalwaysdns.eu> [Mon, 30 Mar 2020 15:23:56 +0200] rev 12960
[server] extract creating a new cnxset in a _new_cnxset() helper
So we can move logic specific to _CnxSetPool here.
Philippe Pepiot <ph@itsalwaysdns.eu> [Mon, 30 Mar 2020 15:19:23 +0200] rev 12959
[server] avoid a possible race condition on _CnxSetPool.close()
The pool could become empty between time to check and time to use.
Philippe Pepiot <ph@itsalwaysdns.eu> [Mon, 30 Mar 2020 15:17:10 +0200] rev 12958
[server] extract "no pooler" CnxSet class to a _BaseCnxSet class
So we get rid of "if self._queue is None" in each method of _CnxSetPool
Also add helper get_cnxset(source, size) to instantiate the correct pooler class.
Philippe Pepiot <ph@itsalwaysdns.eu> [Tue, 31 Mar 2020 19:15:03 +0200] rev 12957
[server] prevent returning closed cursor to the database pool
In since c8c6ad8 init_repository use repo.internal_cnx() instead of
repo.system_source.get_connection() so it use the pool and we should not close
cursors from the pool before returning it back. Otherwise we may have
"connection already closed" error.
This bug only trigger when connection-pool-size = 1. Since we are moving to use
a dynamic pooler we need to get this fixed.
This does not occur with sqlite since the connection wrapper instantiate new
cursor everytime, but this occur with other databases.
Laurent Wouters <lwouters@cenotelie.fr> [Fri, 20 Mar 2020 14:34:07 +0100] rev 12931
[rql] Store selected variables for RQL select queries in ResultSet (#17218476)
By storing the name of the selected variables for RQL select queries in the
ResultSet (within the "variables" attribute), the information can be passed
down to specific protocols, e.g. rqlio that may wish to pass is down further
to clients.
In turn, clients can then choose to present the results of RQL select queries
as symbolic bindings using the names used in the query's projection, instead of
ordinal arrays.
Simon Chabot <simon.chabot@logilab.fr> [Thu, 12 Mar 2020 15:38:51 +0100] rev 12930
[debugtoolbar] Make SQL and RQL tables sortable
It's usefull to sort query by duration for instance.
Simon Chabot <simon.chabot@logilab.fr> [Thu, 12 Mar 2020 15:37:59 +0100] rev 12929
[debugtoolbar] Do not render CW controller panel when no controller got collected
This can happen on pure pyramid applications for instance.
Elodie Thieblin <ethieblin@logilab.fr> [Wed, 18 Mar 2020 11:30:05 +0100] rev 12928
[doc] Fix bugs in code examples
Elodie Thieblin <ethieblin@logilab.fr> [Wed, 18 Mar 2020 11:29:30 +0100] rev 12927
[doc] Remove zone cube which causes to crash on install
The zone cube is not compatible with python3.
Elodie Thieblin <ethieblin@logilab.fr> [Wed, 18 Mar 2020 11:45:35 +0100] rev 12926
[doc] Precise which component to modify in gallery tutorial
Elodie Thieblin <ethieblin@logilab.fr> [Wed, 18 Mar 2020 10:20:29 +0100] rev 12925
[doc] Fix example about Community view customization
Elodie Thieblin <ethieblin@logilab.fr> [Wed, 18 Mar 2020 09:58:05 +0100] rev 12924
[doc] Add command pip install of new cube
Elodie Thieblin <ethieblin@logilab.fr> [Wed, 18 Mar 2020 09:57:48 +0100] rev 12923
[doc] update cubicweb version
Elodie Thieblin <ethieblin@logilab.fr> [Wed, 18 Mar 2020 09:24:02 +0100] rev 12922
[doc, blog tutorial] Remove cubicweb-dev from pip dependencies
This pip package does not exist
Elodie Thieblin <ethieblin@logilab.fr> [Wed, 18 Mar 2020 09:22:45 +0100] rev 12921
[doc] Add requirement for gettext and graphviz
When running the tutorial from scratch, I had errors because these
two packages were not installed.
Philippe Pepiot <philippe.pepiot@logilab.fr> [Wed, 18 Mar 2020 13:18:21 +0100] rev 12920
Added tag 3.27.3, debian/3.27.3-1 for changeset 85284f028266
Philippe Pepiot <philippe.pepiot@logilab.fr> [Wed, 18 Mar 2020 13:18:04 +0100] rev 12919
[pkg] version 3.27.3
Philippe Pepiot <philippe.pepiot@logilab.fr> [Tue, 17 Mar 2020 13:36:27 +0100] rev 12918
[pkg] require python >= 3.6 in debian packaging
Philippe Pepiot <philippe.pepiot@logilab.fr> [Tue, 17 Mar 2020 13:34:54 +0100] rev 12917
[pkg] merge 3.27
Require python >= 3.6 since recent typing notations require >= 3.6
Philippe Pepiot <philippe.pepiot@logilab.fr> [Tue, 17 Mar 2020 13:31:50 +0100] rev 12916
[pkg] add python3 only pypi specifiers
This is only for pypi statistics purposes.
Also add 'Programming Language :: Python', looks obvious but seems to be sane to have this as well.
Philippe Pepiot <philippe.pepiot@logilab.fr> [Tue, 17 Mar 2020 13:30:50 +0100] rev 12915
[pkg] the wheel is no longer universal
Since we're only py3 compatible. In practice this changes nothing since we
don't upload cubicweb wheels to pypi.
Philippe Pepiot <philippe.pepiot@logilab.fr> [Tue, 17 Mar 2020 13:29:08 +0100] rev 12914
[pkg] require python >= 3.4
This avoid pip pulling a version that does not run on python2 when using a
python2 environment.
Since we already released some 3.27 releases in pypi, I think we should release
3.27.3 and remove releases 3.27.2, 3.27.1 and 3.27.0 from pypi.
Fabien Amarger <fabien.amarger@logilab.fr> [Wed, 11 Mar 2020 11:18:40 +0100] rev 12913
merge public heads
Fabien Amarger <fabien.amarger@logilab.fr> [Tue, 10 Mar 2020 17:37:43 +0100] rev 12912
[web.views] add Link alternate in HTTP response header in HTML view
Team: famarger, schabot, nchauvat, fferry, ethieblin
Nicolas Chauvat <nicolas.chauvat@logilab.fr> [Tue, 10 Mar 2020 23:47:50 +0100] rev 12911
[pyramid] add routes /{eid} and /{etype}/{eid} to return RDF when rdf mimetype in Accept HTTP headers
* simplify pyramid/resources.py by making the classmethod that returns a closure
a simple function and removing the EntityResource and ETYpeResource classes
that are barely used
* replace predicate MatchIsETypePredicate with MatchIsETypeAndEIDPredicate
Team: famarger, schabot, nchauvat, fferry, ethieblin
Elodie Thieblin <ethieblin@logilab.fr> [Tue, 10 Mar 2020 23:44:45 +0100] rev 12910
[entities] simplify rdf generation and add a generic rdf adapter
Team: famarger, schabot, nchauvat, fferry, ethieblin
Simon Chabot <simon.chabot@logilab.fr> [Thu, 05 Mar 2020 17:50:00 +0100] rev 12909
Added tag 3.26.17, debian/3.26.17-1 for changeset 5c6d242069b6
Simon Chabot <simon.chabot@logilab.fr> [Thu, 05 Mar 2020 17:49:34 +0100] rev 12908
[pkg] version 3.26.17
Simon Chabot <simon.chabot@logilab.fr> [Thu, 05 Mar 2020 16:03:26 +0100] rev 12907
[fix, calendar] Ensure that the buffer is a string
'unicode' is not defined in python3
Philippe Pepiot <philippe.pepiot@logilab.fr> [Thu, 05 Mar 2020 10:41:30 +0100] rev 12906
Added tag 3.26.16, debian/3.26.16-1 for changeset fb6aecd654a3
Philippe Pepiot <philippe.pepiot@logilab.fr> [Thu, 05 Mar 2020 10:41:14 +0100] rev 12905
[pkg] version 3.26.16
Julien Tayon <julien.tayon@logilab.fr> [Tue, 25 Feb 2020 23:31:30 +0100] rev 12904
[ldapfeed] add option to enable starttls on ldap servers
Modern ldap servers connection often use, or even require starttls.
Philippe Pepiot <philippe.pepiot@logilab.fr> [Tue, 25 Feb 2020 23:30:32 +0100] rev 12903
[ldapfeed] re-enable ldap tests for python 3.7
This was disabled because ldap3<2 wasn't compatible with python 3.7
While I'm here, drop unseless newline.
Julien Tayon <julien.tayon@logilab.fr> [Tue, 25 Feb 2020 23:22:58 +0100] rev 12902
[ldapfeed] make code compatible with ldap3>=2
* Some constants have been renamed.
* Directly bind when data-cnx-dn/data-cnx-password are provided, some servers,
including ours require this.
* Use raise_exceptions=True to avoid ignored ldap errors
* raise in case of failed anonymous bind
* do not search for "dn" attribute because this raise an "invalid attribute"
with new ldap3 versions
* Password is now returned as bytes, so no longer need to encode them before crypt.
* modification_date is now returned as a datetime object
Co-Authored-By: Philippe Pepiot <philippe.pepiot@logilab.fr>
Closes #16073071
Philippe Pepiot <philippe.pepiot@logilab.fr> [Tue, 25 Feb 2020 22:45:42 +0100] rev 12901
[ldapfeed] use LDAP_SCOPES to find user-scope
We already have LDAP_SCOPES dict defining possible scopes, this avoid possible code injection from config...
Thus we can drop global variables already defined in LDAP_SCOPES since they are not used directly anymore.
Philippe Pepiot <philippe.pepiot@logilab.fr> [Thu, 05 Mar 2020 10:15:38 +0100] rev 12900
Merge 3.27
Philippe Pepiot <philippe.pepiot@logilab.fr> [Thu, 05 Mar 2020 09:54:49 +0100] rev 12899
Added tag 3.27.2, debian/3.27.2-1 for changeset e731c31eaed0
Philippe Pepiot <philippe.pepiot@logilab.fr> [Thu, 05 Mar 2020 09:54:35 +0100] rev 12898
[pkg] version 3.27.2
Julien Tayon <julien.tayon@logilab.fr> [Tue, 25 Feb 2020 23:31:30 +0100] rev 12897
[ldapfeed] add option to enable starttls on ldap servers
Modern ldap servers connection often use, or even require starttls.
Philippe Pepiot <philippe.pepiot@logilab.fr> [Tue, 25 Feb 2020 23:30:32 +0100] rev 12896
[ldapfeed] re-enable ldap tests for python 3.7
This was disabled because ldap3<2 wasn't compatible with python 3.7
While I'm here, drop unseless newline.
Julien Tayon <julien.tayon@logilab.fr> [Tue, 25 Feb 2020 23:22:58 +0100] rev 12895
[ldapfeed] make code compatible with ldap3>=2
* Some constants have been renamed.
* Directly bind when data-cnx-dn/data-cnx-password are provided, some servers,
including ours require this.
* Use raise_exceptions=True to avoid ignored ldap errors
* raise in case of failed anonymous bind
* do not search for "dn" attribute because this raise an "invalid attribute"
with new ldap3 versions
* Password is now returned as bytes, so no longer need to encode them before crypt.
* modification_date is now returned as a datetime object
Co-Authored-By: Philippe Pepiot <philippe.pepiot@logilab.fr>
Closes #16073071
Philippe Pepiot <philippe.pepiot@logilab.fr> [Tue, 25 Feb 2020 22:45:42 +0100] rev 12894
[ldapfeed] use LDAP_SCOPES to find user-scope
We already have LDAP_SCOPES dict defining possible scopes, this avoid possible code injection from config...
Thus we can drop global variables already defined in LDAP_SCOPES since they are not used directly anymore.
Julien Tayon <julien.tayon@logilab.fr> [Tue, 25 Feb 2020 22:18:15 +0100] rev 12893
[ldapfeed] drop now useless import from __future__
Simon Chabot <simon.chabot@logilab.fr> [Fri, 28 Feb 2020 17:11:01 +0100] rev 12892
[rdf] Add a basic foaf adapter for CWUser
By the way, use RDFLib namespaces
Simon Chabot <simon.chabot@logilab.fr> [Fri, 14 Feb 2020 18:15:55 +0100] rev 12891
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr> [Wed, 12 Feb 2020 13:58:17 +0100] rev 12890
[pyramid, predicate] Add a predicate that matches if the pattern is an eid in the DB
Nicolas Chauvat <nicolas.chauvat@logilab.fr> [Wed, 13 Mar 2019 11:06:46 +0100] rev 12889
[server.querier] construct ExecutionPlan from schema since querier is not needed
Nicolas Chauvat <nicolas.chauvat@logilab.fr> [Wed, 19 Feb 2020 19:49:01 +0100] rev 12888
[server.querier] remove useless attribute Querier._planner
Nicolas Chauvat <nicolas.chauvat@logilab.fr> [Wed, 13 Mar 2019 11:02:39 +0100] rev 12887
[server.querier] remove useless indirection Querier.rqlannotator
Nicolas Chauvat <nicolas.chauvat@logilab.fr> [Wed, 13 Mar 2019 10:40:05 +0100] rev 12886
[server.querier] remove useless indirections ExecutionPlan.{syssource,rqlhelper,schema}
Simpler is better.
Nicolas Chauvat <nicolas.chauvat@logilab.fr> [Wed, 13 Mar 2019 10:26:15 +0100] rev 12885
[server.rqlannotation] rename SQLGenAnnotator to RQLAnnotator
This class is in charge of annotating the RQL syntax tree with
various bits of information, like (in)variance, use of
full-text-index, etc. It is a needed step before the generation
of SQL, but does not touch SQL directly. Hence RQLAnnotator
seems a better name.
Nicolas Chauvat <nicolas.chauvat@logilab.fr> [Fri, 15 Mar 2019 21:35:59 +0100] rev 12884
[server] drop system_source_cnx for a simpler internal API
system_source_cnx() can be replaced with source_cnx().
If system_source_cnx() is called with dbms_system_base=False, it is
strictly equivalent to calling source_cnx() with the same source,
privileges and interactivity.
If system_source_cnx() is called with dbms_system_base=True, it is
equivalent to calling source_cnx() with the system database and the
same source, privileges and interactivity.
No use of the default value for 'special_privs' was found in the code.
Nicolas Chauvat <nicolas.chauvat@logilab.fr> [Wed, 13 Mar 2019 00:01:35 +0100] rev 12883
[server/sources/native] refactor to remove useless injection
Nicolas Chauvat <nicolas.chauvat@logilab.fr> [Wed, 13 Mar 2019 00:15:48 +0100] rev 12882
[cwvreg] rename CWRegistryStore.solutions to compute_var_types
solutions() seems an obscure name to me. Since this method computes
the types of the variables of the RQL query string, let us rename it
to compute_var_types.
Nicolas Chauvat <nicolas.chauvat@logilab.fr> [Sun, 02 Feb 2020 22:15:38 +0100] rev 12881
[doc] replace python with python3 in shell commands
Nicolas Chauvat <nicolas.chauvat@logilab.fr> [Sat, 08 Feb 2020 22:57:59 +0100] rev 12880
[adapters] move class EntityAdapter from cubicweb.view to cubicweb.entity
The adapter mechanism is not specific to the use of views. Moving the
class the cubicweb.entity makes this clearer.
Nicolas Chauvat <nicolas.chauvat@logilab.fr> [Sat, 15 Feb 2020 17:08:15 +0100] rev 12879
[doc] replace tabs with spaces (and make linter happy)
Nicolas Chauvat <nicolas.chauvat@logilab.fr> [Sat, 08 Feb 2020 22:20:45 +0100] rev 12878
[setup] add rdflib-jsonld to dependencies for cubicweb[rdf]