def transactionFunc(backend, data, is_read): key = data["sessionId"] session_tracker = backend.sessions[key] session = session_tracker.session metadata, timeout = to_meta_and_timeout(data) @neo4j.unit_of_work(metadata=metadata, timeout=timeout) def func(tx): txkey = backend.next_key() backend.transactions[txkey] = tx session_tracker.state = '' backend.send_response("RetryableTry", {"id": txkey}) cont = True while cont: cont = backend.process_request() if session_tracker.state == '+': cont = False elif session_tracker.state == '-': if session_tracker.error_id: raise backend.errors[session_tracker.error_id] else: raise Exception("Client said no") if is_read: session.read_transaction(func) else: session.write_transaction(func) backend.send_response("RetryableDone", {})
def SessionBeginTransaction(backend, data): key = data["sessionId"] session = backend.sessions[key].session metadata, timeout = to_meta_and_timeout(data) tx = session.begin_transaction(metadata=metadata, timeout=timeout) key = backend.next_key() backend.transactions[key] = tx backend.send_response("Transaction", {"id": key})