diff options
| author | Christophe Simonis <chs@odoo.com> | 2017-11-13 14:45:51 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2017-11-13 14:45:51 +0100 |
| commit | abfd662109186bbd2df1267d38654893e2cf652b (patch) | |
| tree | 6c57a6673337f2c77969b2a9cd3bb48157091616 | |
| parent | 3768cce7480821bc206b9502005f9c24ccd1c09e (diff) | |
| parent | 9822c42707cab575b4a173b60569da1a1c6725aa (diff) | |
[MERGE] forward port branch 10.0 up to 9822c42707c
| -rw-r--r-- | addons/mass_mailing/static/src/js/mass_mailing_editor.js | 4 | ||||
| -rw-r--r-- | doc/cla/individual/silviofdez.md | 11 | ||||
| -rw-r--r-- | odoo/addons/base/ir/ir_sequence.py | 39 | ||||
| -rw-r--r-- | odoo/service/server.py | 10 |
4 files changed, 40 insertions, 24 deletions
diff --git a/addons/mass_mailing/static/src/js/mass_mailing_editor.js b/addons/mass_mailing/static/src/js/mass_mailing_editor.js index cc0b9d2dd08..9e62986b383 100644 --- a/addons/mass_mailing/static/src/js/mass_mailing_editor.js +++ b/addons/mass_mailing/static/src/js/mass_mailing_editor.js @@ -326,7 +326,6 @@ snippets_editor.Class.include({ switch_theme.last = theme_params; $body.removeClass(all_classes).addClass(theme_params.className); - switch_images(theme_params, $editable_area); var $old_layout = $editable_area.find(".o_layout"); // This wrapper structure is the only way to have a responsive and @@ -349,8 +348,9 @@ snippets_editor.Class.include({ $contents = $editable_area.contents(); } - $editable_area.empty().append($new_layout); $new_wrapper_content.append($contents); + switch_images(theme_params, $new_wrapper_content); + $editable_area.empty().append($new_layout); $old_layout.remove(); if (first_choice) { diff --git a/doc/cla/individual/silviofdez.md b/doc/cla/individual/silviofdez.md new file mode 100644 index 00000000000..b7e52cc183c --- /dev/null +++ b/doc/cla/individual/silviofdez.md @@ -0,0 +1,11 @@ +Spain, 2017-10-24 + +I hereby agree to the terms of the Odoo Individual Contributor License +Agreement v1.0. + +I declare that I am authorized and able to make this agreement and sign this +declaration. + +Signed, + +Silvio Fernandez silviofernandezmarin@gmail.com https://github.com/silviofdez
\ No newline at end of file diff --git a/odoo/addons/base/ir/ir_sequence.py b/odoo/addons/base/ir/ir_sequence.py index 95aa941c86e..5431a33eac2 100644 --- a/odoo/addons/base/ir/ir_sequence.py +++ b/odoo/addons/base/ir/ir_sequence.py @@ -54,6 +54,24 @@ def _update_nogap(self, number_increment): self.invalidate_cache(['number_next'], [self.id]) return number_next +def _predict_nextval(self, seq_id): + """Predict next value for PostgreSQL sequence without consuming it""" + # Cannot use currval() as it requires prior call to nextval() + query = """SELECT last_value, + (SELECT increment_by + FROM pg_sequences + WHERE sequencename = 'ir_sequence_%(seq_id)s'), + is_called + FROM ir_sequence_%(seq_id)s""" + if self.env.cr._cnx.server_version < 100000: + query = "SELECT last_value, increment_by, is_called FROM ir_sequence_%(seq_id)s" + self.env.cr.execute(query % {'seq_id': seq_id}) + (last_value, increment_by, is_called) = self.env.cr.fetchone() + if is_called: + return last_value + increment_by + # sequence has just been RESTARTed to return last_value next time + return last_value + class IrSequence(models.Model): """ Sequence model. @@ -73,15 +91,8 @@ class IrSequence(models.Model): if seq.implementation != 'standard': seq.number_next_actual = seq.number_next else: - # get number from postgres sequence. Cannot use currval, because that might give an error when - # not having used nextval before. - query = "SELECT last_value, increment_by, is_called FROM ir_sequence_%03d" % seq.id - self._cr.execute(query) - (last_value, increment_by, is_called) = self._cr.fetchone() - if is_called: - seq.number_next_actual = last_value + increment_by - else: - seq.number_next_actual = last_value + seq_id = "%03d" % seq.id + seq.number_next_actual = _predict_nextval(self, seq_id) def _set_number_next_actual(self): for seq in self: @@ -293,14 +304,8 @@ class IrSequenceDateRange(models.Model): if seq.sequence_id.implementation != 'standard': seq.number_next_actual = seq.number_next else: - # get number from postgres sequence. Cannot use currval, because that might give an error when - # not having used nextval before. - self._cr.execute("SELECT last_value, increment_by, is_called FROM ir_sequence_%03d_%03d" % (seq.sequence_id.id, seq.id)) - (last_value, increment_by, is_called) = self._cr.fetchone() - if is_called: - seq.number_next_actual = last_value + increment_by - else: - seq.number_next_actual = last_value + seq_id = "%03d_%03d" % (seq.sequence_id.id, seq.id) + seq.number_next_actual = _predict_nextval(self, seq_id) def _set_number_next_actual(self): for seq in self: diff --git a/odoo/service/server.py b/odoo/service/server.py index 67ea1dedba1..149ca149ed0 100644 --- a/odoo/service/server.py +++ b/odoo/service/server.py @@ -361,15 +361,15 @@ class GeventServer(CommonServer): import gevent from gevent.wsgi import WSGIServer - # Set process memory limit as an extra safeguard - _, hard = resource.getrlimit(resource.RLIMIT_AS) - resource.setrlimit(resource.RLIMIT_AS, (config['limit_memory_hard'], hard)) if os.name == 'posix': + # Set process memory limit as an extra safeguard + _, hard = resource.getrlimit(resource.RLIMIT_AS) + resource.setrlimit(resource.RLIMIT_AS, (config['limit_memory_hard'], hard)) signal.signal(signal.SIGQUIT, dumpstacks) signal.signal(signal.SIGUSR1, log_ormcache_stats) - - gevent.spawn(self.watchdog) + gevent.spawn(self.watchdog) + self.httpd = WSGIServer((self.interface, self.port), self.app) _logger.info('Evented Service (longpolling) running on %s:%s', self.interface, self.port) try: |
