On met dans une transaction atomique le truncate/copy.

* 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)
This commit is contained in:
Pierre-Elliott Bécue 2015-04-03 14:20:56 +02:00
parent 23c9df55eb
commit d9bd6a621d

View file

@ -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)