/** * @param ctx Kernal context. * @param cfg GGFS configuration. * @param metaMgr Meta manager. * @param dataMgr Data manager. * @param srvMgr Server manager. * @param fragmentizerMgr Fragmentizer manager. * @throws GridException If GGFs context instantiation is failed. */ public GridGgfsContext( GridKernalContext ctx, GridGgfsConfiguration cfg, GridGgfsMetaManager metaMgr, GridGgfsDataManager dataMgr, GridGgfsServerManager srvMgr, GridGgfsFragmentizerManager fragmentizerMgr ) throws GridException { this.ctx = ctx; this.cfg = cfg; this.metaMgr = add(metaMgr); this.dataMgr = add(dataMgr); this.srvMgr = add(srvMgr); this.fragmentizerMgr = add(fragmentizerMgr); ggfs = new GridGgfsImpl(this); }
/** * Constructs GGFS IPC handler. */ GridGgfsIpcHandler(GridGgfsContext ggfsCtx, boolean mgmt) { assert ggfsCtx != null; this.mgmt = mgmt; ctx = ggfsCtx.kernalContext(); ggfs = ggfsCtx.ggfs(); // Keep buffer size multiple of block size so no extra byte array copies is performed. bufSize = ggfsCtx.configuration().getBlockSize() * 2; log = ctx.log(GridGgfsIpcHandler.class); }
/** * Constructs file output stream. * * @param ggfsCtx GGFS context. * @param path Path to stored file. * @param fileInfo File info to write binary data to. * @param prefetchBlocks Number of blocks to prefetch. * @param seqReadsBeforePrefetch Amount of sequential reads before prefetch is triggered. * @param secReader Optional secondary file system reader. * @param metrics Local GGFS metrics. */ GridGgfsInputStreamImpl(GridGgfsContext ggfsCtx, GridGgfsPath path, GridGgfsFileInfo fileInfo, int prefetchBlocks, int seqReadsBeforePrefetch, @Nullable GridGgfsReader secReader, GridGgfsLocalMetrics metrics) { assert ggfsCtx != null; assert path != null; assert fileInfo != null; assert metrics != null; this.path = path; this.fileInfo = fileInfo; this.prefetchBlocks = prefetchBlocks; this.seqReadsBeforePrefetch = seqReadsBeforePrefetch; this.secReader = secReader; this.metrics = metrics; meta = ggfsCtx.meta(); data = ggfsCtx.data(); log = ggfsCtx.kernalContext().log(GridGgfsInputStream.class); maxLocCacheSize = (prefetchBlocks > 0 ? prefetchBlocks : 1) * 3 / 2; locCache = new LinkedHashMap<>(maxLocCacheSize, 1.0f); pendingFuts = new GridConcurrentHashSet<>(prefetchBlocks > 0 ? prefetchBlocks : 1); }
/** * Constructor. * * @param ggfsCtx GGFS context. */ GridGgfsDeleteWorker(GridGgfsContext ggfsCtx) { super("ggfs-delete-worker%" + ggfsCtx.ggfs().name() + "%" + ggfsCtx.kernalContext().localNodeId() + "%"); this.ggfsCtx = ggfsCtx; meta = ggfsCtx.meta(); data = ggfsCtx.data(); evts = ggfsCtx.kernalContext().event(); String ggfsName = ggfsCtx.ggfs().name(); topic = F.isEmpty(ggfsName) ? TOPIC_GGFS : TOPIC_GGFS.topic(ggfsName); assert meta != null; assert data != null; log = ggfsCtx.kernalContext().log(GridGgfsDeleteWorker.class); }
/** {@inheritDoc} */ @Override protected void onKernalStart0() throws GridException { if (ggfsCtx.configuration().isFragmentizerEnabled()) { // Check at startup if this node is a fragmentizer coordinator. GridDiscoveryEvent locJoinEvt = ggfsCtx.kernalContext().discovery().localJoinEvent(); checkLaunchCoordinator(locJoinEvt); } }
cfg = ggfsCtx.configuration(); log = ggfsCtx.kernalContext().log(GridGgfsImpl.class); evts = ggfsCtx.kernalContext().event(); meta = ggfsCtx.meta(); data = ggfsCtx.data(); secondaryFs = cfg.getSecondaryFileSystem(); if (ggfsCtx.configuration().getPathModes() != null) { for (Map.Entry<String, GridGgfsMode> e : ggfsCtx.configuration().getPathModes().entrySet()) { if (!dfltModes.containsKey(e.getKey())) cfgModes.put(e.getKey(), e.getValue()); String dataCacheName = ggfsCtx.configuration().getDataCacheName(); for (GridCacheConfiguration cacheCfg : ggfsCtx.kernalContext().config().getCacheConfiguration()) { if (F.eq(dataCacheName, cacheCfg.getName())) { GridCacheEvictionPolicy evictPlc = cacheCfg.getEvictionPolicy(); ggfsCtx.kernalContext().io().addMessageListener(topic, delMsgLsnr); ggfsCtx.kernalContext().event().addLocalEventListener(delDiscoLsnr, EVT_NODE_LEFT, EVT_NODE_FAILED);
/** * Constructor. */ private BindWorker() { super(ggfsCtx.kernalContext().gridName(), "bind-worker", ggfsCtx.kernalContext().log()); }
/** {@inheritDoc} */ @Override public void stop(boolean cancel) { // Stop GGFS instances. for (GridGgfsContext ggfsCtx : ggfsCache.values()) { if (log.isDebugEnabled()) log.debug("Stopping ggfs: " + ggfsCtx.configuration().getName()); List<GridGgfsManager> mgrs = ggfsCtx.managers(); for (ListIterator<GridGgfsManager> it = mgrs.listIterator(mgrs.size()); it.hasPrevious();) { GridGgfsManager mgr = it.previous(); mgr.stop(cancel); } ggfsCtx.ggfs().stop(); } ggfsCache.clear(); if (log.isDebugEnabled()) log.debug("GGFS processor stopped."); }
/** {@inheritDoc} */ @Override protected void start0() throws GridException { GridGgfsConfiguration ggfsCfg = ggfsCtx.configuration(); Map<String,String> cfg = ggfsCfg.getIpcEndpointConfiguration(); if (F.isEmpty(cfg)) { // Set default configuration. cfg = new HashMap<>(); cfg.put("type", U.isWindows() ? "tcp" : "shmem"); cfg.put("port", String.valueOf(DFLT_IPC_PORT)); } if (ggfsCfg.isIpcEndpointEnabled()) bind(cfg, /*management*/false); if (ggfsCfg.getManagementPort() >= 0) { cfg = new HashMap<>(); cfg.put("type", "tcp"); cfg.put("port", String.valueOf(ggfsCfg.getManagementPort())); bind(cfg, /*management*/true); } if (bindWorker != null) new GridThread(bindWorker).start(); }
/** {@inheritDoc} */ @Override public void onKernalStop(boolean cancel) { for (GridGgfsContext ggfsCtx : ggfsCache.values()) { if (log.isDebugEnabled()) log.debug("Stopping ggfs: " + ggfsCtx.configuration().getName()); List<GridGgfsManager> mgrs = ggfsCtx.managers(); for (ListIterator<GridGgfsManager> it = mgrs.listIterator(mgrs.size()); it.hasPrevious();) { GridGgfsManager mgr = it.previous(); mgr.onKernalStop(cancel); } } if (log.isDebugEnabled()) log.debug("Finished executing GGFS processor onKernalStop() callback."); }
/** * @param nodeId Node ID to send message to. * @param msg Message to send. * @throws GridException If send failed. */ private void sendWithRetries(UUID nodeId, GridGgfsCommunicationMessage msg) throws GridException { for (int i = 0; i < MESSAGE_SEND_RETRY_COUNT; i++) { try { ggfsCtx.send(nodeId, topic, msg, SYSTEM_POOL); return; } catch (GridException e) { if (!ggfsCtx.kernalContext().discovery().alive(nodeId)) throw new GridTopologyException("Failed to send message (node left the grid) " + "[nodeId=" + nodeId + ", msg=" + msg + ']'); if (i == MESSAGE_SEND_RETRY_COUNT - 1) throw e; U.sleep(MESSAGE_SEND_RETRY_INTERVAL); } } }
if (node.order() < minNodeOrder && ggfsCtx.ggfsNode(node)) minNodeOrder = node.order(); GridNode locNode = ggfsCtx.kernalContext().grid().localNode();
GridGgfsContext ggfsCtx = new GridGgfsContext( ctx, new GridGgfsConfiguration(cfg), for (GridGgfsManager mgr : ggfsCtx.managers()) mgr.start(ggfsCtx);
new GridGgfsFileInfo(ggfsCtx.configuration().getBlockSize(), status.length(), ggfsCtx.ggfs().evictExclude(curPath, false), status.properties());
@Override @Nullable public Object call() throws Exception { try { ggfsCtx.send(nodeId, topic, msg, SYSTEM_POOL); } catch (GridException e) { completionFut.onError(nodeId, e); } return null; } });
@Override public GridGgfs apply(GridGgfsContext ggfsCtx) { return ggfsCtx.ggfs(); } };
@Override public boolean apply(GridNode n) { return ggfsCtx.ggfsNode(n); } }));