В транзакционном подходе в кешах Ignite мы используем многопоточный подход.
вариант 1: несколько потоков вставляются в кэш (без блокировки) для одного и того же ключа.
вариант 2: несколько потоков считывают данные из кэша (в транзакционной блокировке) с одинаковым ключом.
java.lang.IllegalStateException: не удалось начать новую транзакцию
(текущий поток уже имеет транзакцию): GridNearTxLocal
[mappings = IgniteTxMappingsImpl [], nearLocallyMapped = false,
colocatedLocallyMapped = false, needCheckBackup = null,
hasRemoteLocks = true, trackTimeout = false, lb = null, mvccTracker = null,
mvccOp = null, thread = работник запуска задачи исполнителя для задачи 290,
mappings = IgniteTxMappingsImpl [], super = GridDhtTxLocalAdapter
[nearOnOriginatingNode = false, nearNodes = [], dhtNodes = [],
licitLock = false, super = IgniteTxLocalAdapter [completeBase = null,
sndTransformedVals = false, depEnabled = false, txState = IgniteTxStateImpl
[activeCacheIds = [105038815], recovery = false, mvccEnabled = false,
txMap = [IgniteTxEntry [key = KeyCacheObjectImpl [part = 344, val = abc,
hasValBytes = false], cacheId = 105038815, txKey = IgniteTxKey
[key = KeyCacheObjectImpl [part = 344, val = abc, hasValBytes = false],
cacheId = 105038815], val = [op = READ, val = null], prevVal = [op = NOOP,
val = null], oldVal = [op = NOOP, val = null], entryProcessorsCol = null,
ttl = -1, конфликтExpireTime = -1, конфликтVer = ноль, явныйВер = ноль,
dhtVer = null, filters = null, filtersPassed = false, filtersSet = true,
entry = GridDhtDetachedCacheEntry [super = GridDistributedCacheEntry
[super = GridCacheMapEntry [key = KeyCacheObjectImpl [part = 344, val = abc,
hasValBytes = false], val = null, ver = GridCacheVersion [topVer = 166176849,
order = 1554721151514, nodeOrder = 1], hash = -1768407104, extras = null,
flags = 0]]], подготовлено = 0, заблокировано = true,
nodeId = 962ec8e9-c7bd-4b73-b4d3-078da58f4439, locMapped = false,
expiryPlc = null, TransferExpiryPlc = false, flags = 0, partUpdateCntr = 0,
serReadVer = null, xidVer = GridCacheVersion [topVer = 166176849,
order = 1554721151514, nodeOrder = 44]]]], mvccWaitTxs = null,
qryEnlisted = false, forceSkipCompletedVers = false, super = IgniteTxAdapter
[xidVer = GridCacheVersion [topVer = 166176849, заказ = 1554721151514,
nodeOrder = 44], writeVer = null, неявный = false, loc = true, threadId = 3770,
startTime = 1554721555785, nodeId = 6fb5bb88-fc57-478e-9fb9-c26cc8a311e8,
startVer = GridCacheVersion [topVer = 166176849, заказ = 1554721151514,
nodeOrder = 44], endVer = null, изоляция = REPEATABLE_READ,
параллелизм = PESSIMISTIC, тайм-аут = 0, sysInvalidate = false, sys = false,
plc = 2, commitVer = null, финализация = NONE, invalidParts = null,
state = ACTIVE, timedOut = false, topVer = AffinityTopologyVersion
[topVer = 44, minorTopVer = 0], txCounters = ноль, длительность = 156 мс,
onePhaseCommit = false], size = 1]]]