Существует ли правильная процедура восстановления после ошибки "Duplicate key exists in unique index"? Воспроизвожу проблему так:
В каталоге ~/tnt/2:
$ tarantool
tarantool> box.cfg{listen=3002,replication={'127.0.0.1:3001','127.0.0.1:3002'}} tarantool> box.schema.user.grant('guest', 'read,write,replication', 'universe')
tarantool> box.schema.space.create('db')
tarantool> box.space.db:create_index('id',{type='hash',parts={1,'number'}})
tarantool> box.space.db:insert({1,'one'})
tarantool> box.space.db:insert({2,'two'})
tarantool> box.space.db:select{}
Теперь блокирую обмен между экземплярами tarantool:
# iptables -A INPUT -p tcp --dport 3001 -j DROP
# iptables -A INPUT -p tcp --dport 3002 -j DROP
Добавляю кортеж на двух экземплярах:
tarantool> box.space.db:insert({3,'three'})
tarantool> box.space.db:select{}
Разблокирую обмен:
[root@app1 ~]# iptables -F
На обоих экземплярах получаю:
2019-06-17 08:53:56.057 [16769] main/106/applier/127.0.0.1:3002 box.cc:324 E> error applying row: {type: 'INSERT', replica_id: 1, lsn: 3, space_id: 512, index_id: 0, tuple: [3, "three"]}
2019-06-17 08:53:56.057 [16769] main/106/applier/127.0.0.1:3002 I> can't read row
2019-06-17 08:53:56.057 [16769] main/106/applier/127.0.0.1:3002 memtx_hash.c:287 E> ER_TUPLE_FOUND: Duplicate key exists in unique index 'id' in space 'db'
Я знаю, что допускать таких случаев нельзя. Но сейчас мне интересно, что делать, если это уже случилось?