2015-08-16 2 views
0

Я думаю, что существует проблема при создании записей на графике с использованием транзакций. Вершины, созданные во время операции всегда хранятся в кластере № 3, когда я проверяю на студии веб-приложение вершина создана в ТХ имеет класс «Неизвестный»OrientDB создает создание вершины в транзакции

Вот код:

client = pyorient.OrientDB("localhost", 2424) 
client.connect("xxx", "xxx") 
client.db_open("admin", "admin") 

people_cluster = client.command("create class People extends V") 
client.command("create vertex People content {'name': 'dummy', 'age': 21}") 

attrs = {'@People': {'name': 'another_me', 'age': 31}} 
res = client.record_create(people_cluster[0], attrs) 

attrs2 = {'@People': {'name': 'me', 'age': 30}} 
create_rec_cmd = (client.get_message(pyorient.RECORD_CREATE)).prepare((people_cluster[0], attrs2)) 

tx = tx.commit() 
tx.begin() 
tx.attach(create_rec_cmd) 
tx.commit() 

# This returns 'dummy' and 'another_me', but the people created in the tx is not present 
res = client.command("select from People") 

print(res[0]) => {'@People':{'age': 21, 'name': 'dummy', 'version':2,'rid':'#13:0'} 
print(res[1]) => {'@People':{'age': 31, 'name': 'another_me'},'version':1,'rid':'#13:1'} 

# The ones created in the transaction are found in the cluster #3, but with no class 
print(client.command("select from #3:0")[0]) => {{'name': 'me', 'age': 30},'version':1,'rid':'#3:0'} 

I активировали опцию отладки в XML-конфигурации, и журнал не дает много информации:

2015-08-16 17: 59: 46: 992 INFO {дб = тест} /192.168.10.1:41317 - Байт чтения: 60 [OChannelBinaryServer]

2015-08-16 17: 59: 46: 994 INFO {db = test} /192.168.10.1:41317 - Чтение int (4 байта) ... [OChannelBinaryServer]

2015-08-16 17: 59: 46: 995 INFO {db = test} /192.168.10.1:41317 - Чтение int: 6 [OChannelBinaryServer]

2015-08-16 17: 59: 47: 000 INFO {db = test} /192.168. 10.1: 41317 - Чтение INT (4 байт) ... [OChannelBinaryServer]

2015-08-16 17: 59: 47: 002 ИНФОРМАЦИЯ {дБ} = тест /192.168.10.1:41317 - Read INT: 2113677732 [OChannelBinaryServer]

2015-08-16 17: 59: 47: 003 INF O {db = test} /192.168.10.1:41317 - Байт чтения (1 байт) ... [OChannelBinaryServer]

2015-08-16 17: 59: 47: 004 INFO {db = test} /192.168. 10.1: 41317 - Байт чтения: 1 [OChannelBinaryServer]

2015-08-16 17: 59: 47: 005 INFO {db = test} /192.168.10.1:41317 - Чтение байта (1 байт) ... [ OChannelBinaryServer]

2015-08-16 17: 59: 47: 006 ИНФОРМАЦИЯ {дБ} = тест /192.168.10.1:41317 - прочитать байт: 1 [OChannelBinaryServer]

2015-08-16 17:59 : 47: 006 INFO {db = test} /192.168.10.1:41317 - Чтение байта (1 байт) ... [OChannelBinaryServer]

2015-08-16 17: 59: 47: 007 ИНФОРМАЦИЯ {дБ} = тест /192.168.10.1:41317 - прочитать байт: 3 [OChannelBinaryServer]

2015-08-16 17:59:47 : 007 INFO {db = test} /192.168.10.1:41317 - чтение коротких (2 байта) ... [OChannelBinaryServer]

2015-08-16 17: 59: 47: 007 INFO {db = test}/192.168.10.1:41317 - Читать дальше: -1 [OChannelBinaryServer]

2015-08-16 17: 59: 47: 008 INFO {db = test} /192.168.10.1:41317 - Чтение длинных (8 байт) ... [OChannelBinaryServer]

2015-08-16 17: 59: 47: 008 INFO {db = test} /192.168.10.1:41317 - Читать долго: -2 [OChannelBinaryServer]

2015-08-16 17:59:47: 009 INFO {db = test} /192.168.10.1:41317 - Байт чтения (1 байт) ... [OChannelBinaryServer]

2015-08-16 17: 59: 47: 009 INFO {db = test} /192.168 .10.1: 41317 - Байт чтения: 100 [OChannelBinaryServer]

2015-08-16 17: 59: 47: 010 INFO {db = test} /192.168.10.1: 41317 - Чтение куска байтов. Чтение длины блока как int (4 байта) ... [OChannelBinaryServer]

2015-08-16 17: 59: 47: 010 INFO {db = test} /192.168.10.1:41317 - Читайте длину фрагмента: 18 [ OChannelBinaryServer]

2015-08-16 17: 59: 47: 011 ИНФОРМАЦИЯ {дБ} = тест /192.168.10.1:41317 - Чтение 18 байт ... [OChannelBinaryServer]

2015-08-16 17 : 59: 47: 011 INFO {db = test} /192.168.10.1:41317 - Прочитано 18 байт: возраст: 30, имя: "me" [OChannelBinaryServer]

2015-08-16 17:59:47: 016 INFO {db = test} /192.168.10.1:41317 - Чтение байта (1 байт) ... [OChannelBinaryServer]

2015-08-16 17: 59: 47: 017 ИНФОРМАЦИЯ {дБ} = тест /192.168.10.1:41317 - прочитать байт: 0 [OChannelBinaryServer]

2015-08-16 17:59:47 : 017 INFO {db = test} /192.168.10.1:41317 - Чтение фрагмента байтов. Чтение длина куска в междунар (4 байта) ... [OChannelBinaryServer]

ответ

0

pyorient docs имеют следующий пример (с несколькими линиями для ясности) ...

tx = client.tx_commit() 
tx.begin() 

# create a new record 
rec1 = { 'accommodation': 'home', 'work': 'some work', 'holiday': 'surf' } 
rec_position1 = client.record_create(-1, rec1) 

tx.attach(rec_position1) 

Исходный код record_create выглядит следующим образом ...

def record_create(self, *args): 
return self.get_message("RecordCreateMessage") \ 
    .prepare(args).send().fetch_response() 

Ваш код работает только в get_message и prepare функции, но не send и fetch_response. Я подозреваю, что это ваша проблема.

+0

Спасибо за ответ, но мне не нужно настраивать send и fetch replye, потому что это немедленно отправит msg на сервер. Сделка обрабатывает отправку команд, приложенных при совершении. Записи создаются, только те, которые находятся в транзакции, хранятся в другом кластере без класса. В тестовой папке на заводе вы можете видеть, что они делают это с помощью msgs, поскольку я делаю это тоже. В базовом классе сообщений theres ungly «if» проверка, если в транзакции тогда не отправлять. – Sebastian

Смежные вопросы