2012-10-02 9 views
10

Sto creando un'applicazione con Python 2.7 utilizzando il framework di Google App Engine. Per testare la mia applicazione ho diversi test che vengono eseguiti su nosetests usando il plugin nosegae. Li ho eseguito con il seguente comando:Errore nell'esecuzione di transazioni con più gruppi di entità tramite nosetests

nosetests --with-gae --gae-lib-root=/usr/local/google_appengine/ -w . -w */test/ -v 

Nello strato modello della mia domanda, ho la necessità di eseguire diverse operazioni di database che interessano più gruppi di entità all'interno della stessa transazione. Faccio questo facendo uso della funzione run_in_transaction_options del pacchetto db: https://developers.google.com/appengine/docs/python/datastore/functions#run_in_transaction

Purtroppo, quando si esegue il mio suite di test, ottengo il seguente errore in quei casi di test che cercano di eseguire tale operazione:

BadRequestError: transactions on multiple entity groups only allowed with the High Replication datastore

Non riesco a trovare alcun flag in nosetests che permetta di abilitare l'HRD.

Mi chiedo se è possibile eseguire l'HRD dai nosetest e, in caso affermativo, come può essere impostato?

risposta

16

Consiglio vivamente di passare da db a NDB, dove è possibile utilizzare cross group transactions.

per simulare l'HRD, è possibile aggiungere questa parte alla funzione di setUp i test, da Writing High Replication Datastore tests:

# Create a consistency policy that will simulate the High Replication consistency model. 
self.policy = datastore_stub_util.PseudoRandomHRConsistencyPolicy(probability=0) 

# Initialize the datastore stub with this policy. 
self.testbed.init_datastore_v3_stub(consistency_policy=self.policy) 
Problemi correlati