/** * @param ctx Cache context. * @param obj Object to marshal. * @return Buffer that contains obtained byte array. * @throws IgniteCheckedException If marshalling failed. */ public static byte[] marshal(GridCacheContext ctx, Object obj) throws IgniteCheckedException { assert ctx != null; return marshal(ctx.shared(), ctx.deploymentEnabled(), obj); }
/** * Enter a cache call. */ public void enter() { if (ctx.deploymentEnabled()) ctx.deploy().onEnter(); rwLock.readLock().lock(); checkState(true, true); }
/** * Callback invoked by deployment manager for whenever a class loader gets undeployed. * * @param ldr Class loader. */ public void onUndeployed(ClassLoader ldr) { if (!ctx.isStopping()) { for (GridCacheAdapter<?, ?> cache : caches.values()) { // Do not notify system caches and caches for which deployment is disabled. if (cache.context().userCache() && cache.context().deploymentEnabled()) cache.onUndeploy(ldr); } } }
/** {@inheritDoc} */ @Override public void addActiveCache(GridCacheContext ctx, boolean recovery, IgniteTxAdapter tx) throws IgniteCheckedException { assert cacheCtx == null : "Cache already set [cur=" + cacheCtx.name() + ", new=" + ctx.name() + ']'; assert tx.local(); cacheCtx = ctx; this.recovery = recovery; tx.activeCachesDeploymentEnabled(cacheCtx.deploymentEnabled()); }
/** * @param opCtx Cache operation context. */ private void onEnter(CacheOperationContext opCtx) { ctx.itHolder().checkWeakQueue(); if (ctx.deploymentEnabled()) ctx.deploy().onEnter(); if (opCtx != null) checkAtomicOpsInTx(opCtx); }
/** {@inheritDoc} */ @Override protected GridDhtAtomicAbstractUpdateRequest createRequest( UUID nodeId, long futId, GridCacheVersion writeVer, CacheWriteSynchronizationMode syncMode, @NotNull AffinityTopologyVersion topVer, long ttl, long conflictExpireTime, @Nullable GridCacheVersion conflictVer ) { return new GridDhtAtomicUpdateRequest( cctx.cacheId(), nodeId, futId, writeVer, syncMode, topVer, updateReq.subjectId(), updateReq.taskNameHash(), null, cctx.deploymentEnabled(), updateReq.keepBinary(), updateReq.skipStore(), false); }
/** {@inheritDoc} */ @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { super.prepareMarshal(ctx); GridCacheContext cctx = ctx.cacheContext(cacheId); CacheObjectContext objCtx = cctx.cacheObjectContext(); if (!addDepInfo && cctx.deploymentEnabled()) addDepInfo = true; if (keys != null) { for (int i = 0; i < keys.size(); i++) { keys.get(i).prepareMarshal(objCtx); if (vals != null) { Message val = vals.get(i); if (val instanceof CacheObject) ((CacheObject)val).prepareMarshal(objCtx); else if (val instanceof CacheEntryInfoCollection) { for (GridCacheEntryInfo entry : ((CacheEntryInfoCollection)val).infos()) { CacheObject entryVal = entry.value(); if (entryVal != null) entryVal.prepareMarshal(objCtx); } } else if (val instanceof GridInvokeValue) prepareInvokeValue(cctx, (GridInvokeValue)val); } } } }
/** * @param nodeId Node ID. * @param req Update request. * @param completionCb Completion callback. * @param e Error. */ private void onForceKeysError(final UUID nodeId, final GridNearAtomicAbstractUpdateRequest req, final UpdateReplyClosure completionCb, IgniteCheckedException e ) { GridNearAtomicUpdateResponse res = new GridNearAtomicUpdateResponse(ctx.cacheId(), nodeId, req.futureId(), req.partition(), false, ctx.deploymentEnabled()); res.addFailedKeys(req.keys(), e); completionCb.apply(req, res); }
new GridCacheQueryResponse(cctx.cacheId(), qryInfo.requestId(), e, cctx.deploymentEnabled()), qryInfo.query().timeout()); finished, qryInfo.reducer() == null, cctx.deploymentEnabled());
/** * @param req Request. * @param e Error. */ final void onSendError(GridNearAtomicAbstractUpdateRequest req, IgniteCheckedException e) { GridNearAtomicUpdateResponse res = new GridNearAtomicUpdateResponse(cctx.cacheId(), req.nodeId(), req.futureId(), req.partition(), e instanceof ClusterTopologyCheckedException, cctx.deploymentEnabled()); res.addFailedKeys(req.keys(), e); onPrimaryResponse(req.nodeId(), res, true); }
return "caches with different write-behind setting can't be enlisted in one transaction"; if (activeCacheCtx.deploymentEnabled() != cacheCtx.deploymentEnabled()) return "caches with enabled and disabled deployment modes can't be enlisted in one transaction";
/** * @param req Request. * @param e Error. */ private void onSendError(GridNearAtomicCheckUpdateRequest req, IgniteCheckedException e) { GridNearAtomicUpdateResponse res = new GridNearAtomicUpdateResponse(cctx.cacheId(), req.updateRequest().nodeId(), req.futureId(), req.partition(), e instanceof ClusterTopologyCheckedException, cctx.deploymentEnabled()); res.addFailedKeys(req.updateRequest().keys(), e); onPrimaryResponse(req.updateRequest().nodeId(), res, true); }
/** {@inheritDoc} */ @Override protected boolean onPageReady(boolean loc, GridCacheQueryInfo qryInfo, Collection<?> data, boolean finished, Throwable e) { GridCacheLocalQueryFuture<?, ?, ?> fut = qryInfo.localQueryFuture(); if (loc) assert fut != null; if (e != null) { if (loc) fut.onPage(null, null, e, true); else sendQueryResponse(qryInfo.senderId(), new GridCacheQueryResponse(cctx.cacheId(), qryInfo.requestId(), e, cctx.deploymentEnabled()), qryInfo.query().timeout()); return true; } if (loc) fut.onPage(null, data, null, finished); else { GridCacheQueryResponse res = new GridCacheQueryResponse(cctx.cacheId(), qryInfo.requestId(), /*finished*/false, /*fields*/false, cctx.deploymentEnabled()); res.data(data); res.finished(finished); if (!sendQueryResponse(qryInfo.senderId(), res, qryInfo.query().timeout())) return false; } return true; }
tx.activeCachesDeploymentEnabled(cacheCtx.deploymentEnabled());
/** * @param nodeId Node ID. * @param req Request. * @param e Error. */ private void onForceKeysError(UUID nodeId, GridDhtLockRequest req, IgniteCheckedException e) { GridDhtLockResponse res = new GridDhtLockResponse(ctx.cacheId(), req.version(), req.futureId(), req.miniId(), e, ctx.deploymentEnabled()); try { ctx.io().send(nodeId, res, ctx.ioPolicy()); } catch (ClusterTopologyCheckedException ignored) { if (log.isDebugEnabled()) log.debug("Failed to send lock reply to remote node because it left grid: " + nodeId); } catch (IgniteCheckedException ignored) { U.error(log, "Failed to send lock reply to node: " + nodeId, e); } }
null, topVer, ctx.deploymentEnabled());
/** {@inheritDoc} */ @Override public void loadPage(long id, GridCacheQueryAdapter<?> qry, Collection<ClusterNode> nodes, boolean all) { assert cctx.config().getCacheMode() != LOCAL; assert qry != null; assert nodes != null; GridCacheDistributedQueryFuture<?, ?, ?> fut = futs.get(id); assert fut != null; try { GridCacheQueryRequest req = new GridCacheQueryRequest( cctx.cacheId(), id, cctx.name(), qry.pageSize(), qry.includeBackups(), fut.fields(), all, qry.keepBinary(), qry.subjectId(), qry.taskHash(), queryTopologyVersion(), // Force deployment anyway if scan query is used. cctx.deploymentEnabled() || (qry.scanFilter() != null && cctx.gridDeploy().enabled()), qry.isDataPageScanEnabled()); sendRequest(fut, req, nodes); } catch (IgniteCheckedException e) { fut.onDone(e); } }
/** * @throws Exception In case of error. */ @Test public void testAddedDeploymentInfo2() throws Exception { GridCacheContext ctx = cacheContext(); if (grid(0).configuration().getMarshaller() instanceof BinaryMarshaller) assertFalse(ctx.deploymentEnabled()); else { assertTrue(ctx.deploymentEnabled()); GridCacheIoManager ioMgr = cacheIoManager(); TestMessage msg = new TestMessage(); assertNull(msg.deployInfo()); msg.addDepInfo = false; IgniteUtils.invoke(GridCacheIoManager.class, ioMgr, "onSend", msg, grid(1).cluster().localNode().id()); assertNull(msg.deployInfo()); } }
/** * @param req Request. * @return Response to notify about primary failure. */ final GridNearAtomicUpdateResponse primaryFailedResponse(GridNearAtomicAbstractUpdateRequest req) { assert req.response() == null : req; assert req.nodeId() != null : req; if (msgLog.isDebugEnabled()) { msgLog.debug("Near update fut, node left [futId=" + req.futureId() + ", node=" + req.nodeId() + ']'); } GridNearAtomicUpdateResponse res = new GridNearAtomicUpdateResponse(cctx.cacheId(), req.nodeId(), req.futureId(), req.partition(), true, cctx.deploymentEnabled()); ClusterTopologyCheckedException e = new ClusterTopologyCheckedException("Primary node left grid " + "before response is received: " + req.nodeId()); e.retryReadyFuture(cctx.shared().nextAffinityReadyFuture(req.topologyVersion())); res.addFailedKeys(req.keys(), e); return res; }
/** * @throws Exception In case of error. */ @Test public void testAddedDeploymentInfo() throws Exception { GridCacheContext ctx = cacheContext(); if (grid(0).configuration().getMarshaller() instanceof BinaryMarshaller) assertFalse(ctx.deploymentEnabled()); else { GridCacheIoManager ioMgr = cacheIoManager(); TestMessage msg = new TestMessage(); assertNull(msg.deployInfo()); msg.addDepInfo = true; IgniteUtils.invoke(GridCacheIoManager.class, ioMgr, "onSend", msg, grid(1).cluster().localNode().id()); assertNotNull(msg.deployInfo()); } }