From d9bd6a621d688a8fc5ed5a2dfc66254f4270c02c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Elliott=20B=C3=A9cue?= Date: Fri, 3 Apr 2015 14:20:56 +0200 Subject: [PATCH] On met dans une transaction atomique le truncate/copy. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Cela permet de s'assurer que la table contient bien des données en tout instant où elle le devrait (c'est-à-dire quand on ne la vide pas explicitement) --- surveillance/deconnexion2.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/surveillance/deconnexion2.py b/surveillance/deconnexion2.py index d766733c..a50e1b21 100755 --- a/surveillance/deconnexion2.py +++ b/surveillance/deconnexion2.py @@ -440,9 +440,14 @@ def main(curseur, ldap): # On crée un stream qui sera ensuite utilisé par PostgreSQL stream = cStringIO.StringIO("\n".join(["%s\t%s\t%s\t%s" % (key[0], key[1], value, CUR_DATE) for (key, value) in accounted.iteritems()])) - # On met à jour accounting. - curseur.execute("TRUNCATE accounting;") - curseur.copy_from(stream, "accounting") + # On met à jour accounting, en utilisant une nouvelle + # connexion, qui effectue le truncate/copy dans la même + # transaction. + conn = psycopg2.connect(database='filtrage', user='crans') + curs = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) + curs.execute("TRUNCATE accounting;") + curs.copy_from(stream, "accounting") + conn.commit() # Check and blacklist check_and_blacklist(accounted, curseur, ldap)