@Override public DiskStoreID getDiskStoreID() { return getDiskStore().getDiskStoreID(); }
@Override public DiskStoreID getDiskStoreID() { return getDiskStore().getDiskStoreID(); }
public void resetRVV() { this.versionVector = new DiskRegionVersionVector(ds.getDiskStoreID()); }
private Path getOplogBackupDir(DiskStore diskStore, int index) { String name = diskStore.getName(); if (name == null) { name = GemFireCacheImpl.getDefaultDiskStoreName(); } name = name + "_" + ((DiskStoreImpl) diskStore).getDiskStoreID().toString(); return backupDirectory.resolve(DATA_STORES_DIRECTORY).resolve(name) .resolve(BACKUP_DIR_PREFIX + index); }
public void dumpRegionMetadata(boolean showBuckets) { System.out.println("Disk Store ID: " + getDiskStore().getDiskStoreID()); System.out.println("Regions in the disk store:"); for (Map.Entry<String, List<PlaceHolderDiskRegion>> regionEntry : getRegionsToDump(null) .entrySet()) { System.out.print(" "); List<PlaceHolderDiskRegion> regions = regionEntry.getValue(); PlaceHolderDiskRegion region0 = regions.get(0); if (region0.isBucket()) { dumpPRMetaData(showBuckets, regions); } else { region0.dumpMetadata(); } } }
protected AbstractDiskRegion(DiskStoreImpl ds, long id) { this.ds = ds; this.id = id; this.flags = EnumSet.noneOf(DiskRegionFlag.class); this.onlineMembers = new CopyOnWriteHashSet<PersistentMemberID>(); this.offlineMembers = new CopyOnWriteHashSet<PersistentMemberID>(); this.equalMembers = new CopyOnWriteHashSet<PersistentMemberID>(); this.isRecreated = true; this.backup = true; this.versionVector = new DiskRegionVersionVector(ds.getDiskStoreID()); this.numOverflowOnDisk = new AtomicLong(); this.numEntriesInVM = new AtomicLong(); this.numOverflowBytesOnDisk = new AtomicLong(); // We do not initialize the soplog set here. The soplog set needs // to be handled the complete set of recovered soplogs, which is not available // at the time a recovered disk region is first created. }
/** * Returns the dir name used to back up this DiskStore's directories under. The name is a * concatenation of the disk store name and id. */ private String getBackupDirName(DiskStoreImpl diskStore) { String name = diskStore.getName(); if (name == null) { name = GemFireCacheImpl.getDefaultDiskStoreName(); } return name + "_" + diskStore.getDiskStoreID().toString(); }
/** * Returns the dir name used to back up this DiskStore's directories under. The name is a * concatenation of the disk store name and id. */ String getBackupDirName(DiskStoreImpl diskStore) { String name = diskStore.getName(); if (name == null) { name = GemFireCacheImpl.getDefaultDiskStoreName(); } return name + "_" + diskStore.getDiskStoreID().toString(); } }
@Override public void cmnClearRegion(long drId, ConcurrentHashMap<DiskStoreID, RegionVersionHolder<DiskStoreID>> memberToVersion) { DiskRegionView drv = getDiskRegionById(drId); if (drv.getClearRVV() == null) { this.ifLiveRecordCount++; } // otherwise previous clear is cancelled so don't change liveRecordCount this.ifTotalRecordCount++; DiskStoreID ownerId = parent.getDiskStoreID(); // Create a fake RVV for clear purposes. We only need to memberToVersion information RegionVersionHolder<DiskStoreID> ownerExceptions = memberToVersion.remove(ownerId); long ownerVersion = ownerExceptions == null ? 0 : ownerExceptions.getVersion(); RegionVersionVector rvv = new DiskRegionVersionVector(ownerId, memberToVersion, ownerVersion, new ConcurrentHashMap(), 0L, false, ownerExceptions); drv.setClearRVV(rvv); }
private void writeDiskStoreId() { lock(true); try { ByteBuffer bb = getIFWriteBuffer(1 + 6 + 1); bb.put(OPLOG_MAGIC_SEQ_ID); bb.put(Oplog.OPLOG_TYPE.IF.getBytes(), 0, Oplog.OPLOG_TYPE.getLen()); bb.put(END_OF_RECORD_ID); writeIFRecord(bb, false); // don't do stats for these small records bb = getIFWriteBuffer(1 + 8 + 8 + 1); bb.put(IFREC_DISKSTORE_ID); bb.putLong(parent.getDiskStoreID().getLeastSignificantBits()); bb.putLong(parent.getDiskStoreID().getMostSignificantBits()); bb.put(END_OF_RECORD_ID); writeIFRecord(bb, false); // don't do stats for these small records } catch (IOException ex) { DiskAccessException dae = new DiskAccessException( String.format("Failed writing data to initialization file because: %s", ex), this.parent); if (!this.compactInProgress) { this.parent.handleDiskAccessException(dae); } throw dae; } finally { unlock(true); } }
this.krf.dos.writeLong(getParent().getDiskStoreID().getLeastSignificantBits()); this.krf.dos.writeLong(getParent().getDiskStoreID().getMostSignificantBits()); this.krf.dos.writeByte(END_OF_RECORD_ID);
@Override public VersionSource getVersionMember() { if (this.getDataPolicy().withPersistence()) { return getDiskStore().getDiskStoreID(); } else { return this.cache.getInternalDistributedSystem().getDistributedMember(); } }
public PersistentMemberID generatePersistentID(DiskRegionView dr) { File firstDir = getInfoFileDir().getDir(); InternalDistributedSystem ids = getCache().getInternalDistributedSystem(); InternalDistributedMember memberId = ids.getDistributionManager().getDistributionManagerId(); // NOTE - do NOT use DM.cacheTimeMillis here. See bug #49920 long timestamp = System.currentTimeMillis(); return new PersistentMemberID(getDiskStoreID(), memberId.getInetAddress(), firstDir.getAbsolutePath(), memberId.getName(), timestamp, (short) 0); }
/** * @throws DiskAccessException if this file does not belong to our parent */ private void readDiskStoreRecord(DataInput dis, File f) throws IOException { long leastSigBits = dis.readLong(); long mostSigBits = dis.readLong(); DiskStoreID readDSID = new DiskStoreID(mostSigBits, leastSigBits); if (logger.isTraceEnabled(LogMarker.PERSIST_RECOVERY_VERBOSE)) { logger.trace(LogMarker.PERSIST_RECOVERY_VERBOSE, "diskStoreId={}", readDSID); } readEndOfRecord(dis); DiskStoreID dsid = getParent().getDiskStoreID(); if (!readDSID.equals(dsid)) { throw new DiskAccessException("The oplog file \"" + f + "\" does not belong to the init file \"" + getParent().getInitFile() + "\".", getParent()); } }
@Test public void returnsCurrentAndPreviouslyBackedFiles() throws IOException { String memberId = "member1"; File backupLocation = tempDir.newFolder("backup"); Path memberBackupLocation = Files.createDirectories(backupLocation.toPath().resolve(memberId)); Path diskStoreMemberBackupLocation = Files.createDirectories(memberBackupLocation.resolve(BackupWriter.DATA_STORES_DIRECTORY)); DiskStoreImpl diskStore = mock(DiskStoreImpl.class); when(diskStore.getDiskStoreID()).thenReturn(new DiskStoreID(1, 2)); TestableFileSystemIncrementalBackupLocation fileBackupLocation = new TestableFileSystemIncrementalBackupLocation(backupLocation, "member1"); Path diskStorePath = Files.createDirectories( diskStoreMemberBackupLocation.resolve(fileBackupLocation.getBackupDirName(diskStore))); Files.createFile(diskStorePath.resolve("2.crf")); Files.createFile(diskStorePath.resolve("2.krf")); Files.createFile(diskStorePath.resolve("2.drf")); initializeBackupInspector(fileBackupLocation); Map<String, File> allBackedFiles = fileBackupLocation.getBackedUpOplogs(diskStore); assertThat(allBackedFiles.size()).isEqualTo(6); assertThat(allBackedFiles.keySet()).contains("1.crf", "1.drf", "1.krf", "2.crf", "2.drf", "2.krf"); }
@Test public void testWhenDiskstoresAreEmpty() throws IOException { String memberId = "member1"; File backupLocation = tempDir.newFolder("backup"); Path memberBackupLocation = Files.createDirectories(backupLocation.toPath().resolve(memberId)); Path diskStoreMemberBackupLocation = Files.createDirectories(memberBackupLocation.resolve(BackupWriter.DATA_STORES_DIRECTORY)); DiskStoreImpl diskStore = mock(DiskStoreImpl.class); when(diskStore.getDiskStoreID()).thenReturn(new DiskStoreID(1, 2)); FileSystemIncrementalBackupLocation fileBackupLocation = new FileSystemIncrementalBackupLocation(backupLocation, "member1"); Files.createDirectories( diskStoreMemberBackupLocation.resolve(fileBackupLocation.getBackupDirName(diskStore))); assertThat(fileBackupLocation .getBackedUpOplogs(fileBackupLocation.getMemberBackupLocationDir().toFile(), diskStore)) .isEmpty(); }
@Test public void returnsFilesFromDiskstoreDirectory() throws IOException { String memberId = "member1"; File backupLocation = tempDir.newFolder("backup"); Path memberBackupLocation = Files.createDirectories(backupLocation.toPath().resolve(memberId)); Path diskStoreMemberBackupLocation = Files.createDirectories(memberBackupLocation.resolve(BackupWriter.DATA_STORES_DIRECTORY)); DiskStoreImpl diskStore = mock(DiskStoreImpl.class); when(diskStore.getDiskStoreID()).thenReturn(new DiskStoreID(1, 2)); FileSystemIncrementalBackupLocation fileBackupLocation = new FileSystemIncrementalBackupLocation(backupLocation, "member1"); Path diskStorePath = Files.createDirectories( diskStoreMemberBackupLocation.resolve(fileBackupLocation.getBackupDirName(diskStore))); Path crf = Files.createFile(diskStorePath.resolve("oplog1.crf")); Path krf = Files.createFile(diskStorePath.resolve("oplog1.krf")); Path drf = Files.createFile(diskStorePath.resolve("oplog1.drf")); Collection<File> logFiles = fileBackupLocation .getBackedUpOplogs(fileBackupLocation.getMemberBackupLocationDir().toFile(), diskStore); assertThat(logFiles).isNotEmpty(); assertThat(logFiles).contains(crf.toFile()); assertThat(logFiles).contains(krf.toFile()); assertThat(logFiles).contains(drf.toFile()); }
vs.setMemberID(getParent().getDiskStoreID()); VersionTag vt = vs.asVersionTag(); vt.setRegionVersion(drv.getRegionVersionVector().getNextVersion());
private void writeDiskStoreRecord(OplogFile olf, OPLOG_TYPE type) throws IOException { this.opState = new OpState(); this.opState.initialize(type); writeOpLogBytes(olf, false, true); olf.currSize += getOpStateSize(); this.dirHolder.incrementTotalOplogSize(getOpStateSize()); clearOpState(); this.opState.initialize(getParent().getDiskStoreID()); writeOpLogBytes(olf, false, true); // fix for bug 41928 olf.currSize += getOpStateSize(); this.dirHolder.incrementTotalOplogSize(getOpStateSize()); }
private synchronized VersionTag createDummyTag(DiskRecoveryStore drs) { DiskStoreID member = getParent().getDiskStoreID(); int memberid = getParent().getDiskInitFile().getOrCreateCanonicalId(member); long regionVersion = drs.getVersionForMember(member); VersionTag vt = VersionTag.create(member); vt.setEntryVersion(1); vt.setRegionVersion(regionVersion + 1); vt.setMemberID(member); vt.setVersionTimeStamp(getParent().getCache().cacheTimeMillis()); vt.setDistributedSystemId(-1); return vt; }