currentLogLSN = logManager.getAppendLSN();
public static void checkAndSetFirstLSN(AbstractLSMIndex lsmIndex, ILogManager logManager) throws HyracksDataException { // If the index has an empty memory component, we need to set its first LSN (For soft checkpoint) if (lsmIndex.isCurrentMutableComponentEmpty()) { //prevent transactions from incorrectly setting the first LSN on a modified component by checking the index is still empty synchronized (lsmIndex.getOperationTracker()) { if (lsmIndex.isCurrentMutableComponentEmpty()) { LSMIOOperationCallback ioOpCallback = (LSMIOOperationCallback) lsmIndex.getIOOperationCallback(); ioOpCallback.setFirstLsnForCurrentMemoryComponent(logManager.getAppendLSN()); } } } }
private void initIndexCheckpoint(INcApplicationContext appCtx) throws HyracksDataException { final ResourceReference indexRef = ResourceReference.of(file); final IIndexCheckpointManagerProvider checkpointManagerProvider = appCtx.getIndexCheckpointManagerProvider(); final IIndexCheckpointManager indexCheckpointManager = checkpointManagerProvider.get(indexRef); final long currentLSN = appCtx.getTransactionSubsystem().getLogManager().getAppendLSN(); indexCheckpointManager.delete(); indexCheckpointManager.init(Long.MIN_VALUE, currentLSN, LSMComponentId.EMPTY_INDEX_LAST_COMPONENT_ID.getMaxId()); LOGGER.info(() -> "Checkpoint index: " + indexRef); }
protected void capture(long minMCTFirstLSN, boolean sharp) throws HyracksDataException { ILogManager logMgr = txnSubsystem.getLogManager(); ITransactionManager txnMgr = txnSubsystem.getTransactionManager(); final long nextCheckpointId = getNextCheckpointId(); final Checkpoint checkpointObject = new Checkpoint(nextCheckpointId, logMgr.getAppendLSN(), minMCTFirstLSN, txnMgr.getMaxTxnId(), sharp, StorageConstants.VERSION); persist(checkpointObject); cleanup(); }
@Override public void perform(INcApplicationContext appCtx, IReplicationWorker worker) throws HyracksDataException { final IIndexCheckpointManagerProvider indexCheckpointManagerProvider = appCtx.getIndexCheckpointManagerProvider(); PersistentLocalResourceRepository resRepo = (PersistentLocalResourceRepository) appCtx.getLocalResourceRepository(); final IIOManager ioManager = appCtx.getIoManager(); final Collection<LocalResource> partitionResources = resRepo.getPartitionResources(partition).values(); final long currentLSN = appCtx.getTransactionSubsystem().getLogManager().getAppendLSN(); for (LocalResource ls : partitionResources) { DatasetResourceReference ref = DatasetResourceReference.of(ls); final IIndexCheckpointManager indexCheckpointManager = indexCheckpointManagerProvider.get(ref); indexCheckpointManager.delete(); // Get most recent sequence of existing files to avoid deletion Path indexPath = StoragePathUtil.getIndexPath(ioManager, ref); String[] files = indexPath.toFile().list(AbstractLSMIndexFileManager.COMPONENT_FILES_FILTER); if (files == null) { throw HyracksDataException .create(new IOException(indexPath + " is not a directory or an IO Error occurred")); } long maxComponentSequence = Long.MIN_VALUE; for (String file : files) { maxComponentSequence = Math.max(maxComponentSequence, IndexComponentFileReference.of(file).getSequenceEnd()); } indexCheckpointManager.init(maxComponentSequence, currentLSN, maxComponentId); } ReplicationProtocol.sendAck(worker.getChannel(), worker.getReusableBuffer()); }
@Override public void run() { ILSMIndexAccessor lsmAccessor = lsmBtree.createAccessor(NoOpIndexAccessParameters.INSTANCE); try { dsLifecycleMgr.getComponentIdGenerator(StorageTestUtils.DATASET_ID, PARTITION, indexPath) .refresh(); ILSMComponentId next = dsLifecycleMgr .getComponentIdGenerator(StorageTestUtils.DATASET_ID, PARTITION, indexPath).getId(); long flushLsn = nc.getTransactionSubsystem().getLogManager().getAppendLSN(); Map<String, Object> flushMap = new HashMap<>(); flushMap.put(LSMIOOperationCallback.KEY_FLUSH_LOG_LSN, flushLsn); flushMap.put(LSMIOOperationCallback.KEY_NEXT_COMPONENT_ID, next); lsmAccessor.getOpContext().setParameters(flushMap); lsmAccessor.deleteComponents(predicate); } catch (HyracksDataException e) { failure = e; } } };
ILSMComponentId next = dsLifecycleMgr.getComponentIdGenerator(StorageTestUtils.DATASET_ID, PARTITION, indexPath).getId(); long flushLsn = nc.getTransactionSubsystem().getLogManager().getAppendLSN(); Map<String, Object> flushMap = new HashMap<>(); flushMap.put(LSMIOOperationCallback.KEY_FLUSH_LOG_LSN, flushLsn); dsLifecycleMgr.getComponentIdGenerator(StorageTestUtils.DATASET_ID, PARTITION, indexPath).refresh(); next = dsLifecycleMgr.getComponentIdGenerator(StorageTestUtils.DATASET_ID, PARTITION, indexPath).getId(); flushLsn = nc.getTransactionSubsystem().getLogManager().getAppendLSN(); flushMap = new HashMap<>(); flushMap.put(LSMIOOperationCallback.KEY_FLUSH_LOG_LSN, flushLsn);
ILSMComponentId next = dsLifecycleMgr.getComponentIdGenerator(StorageTestUtils.DATASET_ID, PARTITION, indexPath).getId(); long flushLsn = nc.getTransactionSubsystem().getLogManager().getAppendLSN(); Map<String, Object> flushMap = new HashMap<>(); flushMap.put(LSMIOOperationCallback.KEY_FLUSH_LOG_LSN, flushLsn); dsLifecycleMgr.getComponentIdGenerator(StorageTestUtils.DATASET_ID, PARTITION, indexPath).refresh(); next = dsLifecycleMgr.getComponentIdGenerator(StorageTestUtils.DATASET_ID, PARTITION, indexPath).getId(); flushLsn = nc.getTransactionSubsystem().getLogManager().getAppendLSN(); flushMap = new HashMap<>(); flushMap.put(LSMIOOperationCallback.KEY_FLUSH_LOG_LSN, flushLsn);
ILSMComponentId next = dsLifecycleMgr.getComponentIdGenerator(StorageTestUtils.DATASET_ID, PARTITION, indexPath).getId(); long flushLsn = nc.getTransactionSubsystem().getLogManager().getAppendLSN(); Map<String, Object> flushMap = new HashMap<>(); flushMap.put(LSMIOOperationCallback.KEY_FLUSH_LOG_LSN, flushLsn); dsLifecycleMgr.getComponentIdGenerator(StorageTestUtils.DATASET_ID, PARTITION, indexPath).refresh(); next = dsLifecycleMgr.getComponentIdGenerator(StorageTestUtils.DATASET_ID, PARTITION, indexPath).getId(); flushLsn = nc.getTransactionSubsystem().getLogManager().getAppendLSN(); flushMap = new HashMap<>(); flushMap.put(LSMIOOperationCallback.KEY_FLUSH_LOG_LSN, flushLsn);