Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1569,6 +1569,12 @@ public void checkOperation(OperationCategory op) throws StandbyException {
// null in some unit tests
haContext.checkOperation(op);
}

boolean assertsEnabled = false;
assert assertsEnabled = true; // Intentional side effect!!!
if (assertsEnabled && op == OperationCategory.WRITE) {
getSnapshotManager().initThreadLocals();
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,11 @@ public final void deleteSnapshotDiff(INode.ReclaimContext reclaimContext,
if (diffs == null) {
return;
}
int snapshotIndex = diffs.binarySearch(snapshot);
final int snapshotIndex = diffs.binarySearch(snapshot);
// DeletionOrdered: only can remove the element at index 0 and no prior
// check snapshotIndex <= 0 since the diff may not exist
assert !SnapshotManager.isDeletionOrdered()
|| (snapshotIndex <= 0 && prior == Snapshot.NO_SNAPSHOT_ID);

D removed;
if (snapshotIndex == 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ public int size() {

@Override
public T remove(int i) {
// DeletionOrdered: only can remove the element at index 0
assert !SnapshotManager.isDeletionOrdered() || i == 0;
return list.remove(i);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,8 @@ void combinePosteriorAndCollectBlocks(
final INode.ReclaimContext reclaimContext,
final INodeDirectory currentDir,
final DirectoryDiff posterior) {
// DeletionOrdered: must not combine posterior
assert !SnapshotManager.isDeletionOrdered();
diff.combinePosterior(posterior.diff, new Diff.Processor<INode>() {
/** Collect blocks for deleted files. */
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,18 @@ public class SnapshotManager implements SnapshotStatsMXBean {
static final long DFS_NAMENODE_SNAPSHOT_DELETION_ORDERED_GC_PERIOD_MS_DEFAULT
= 5 * 60_000L; //5 minutes

private static final ThreadLocal<Boolean> DELETION_ORDERED
= new ThreadLocal<>();

static boolean isDeletionOrdered() {
final Boolean b = DELETION_ORDERED.get();
return b != null? b: false;
}

public void initThreadLocals() {
DELETION_ORDERED.set(isSnapshotDeletionOrdered());
}

private final FSDirectory fsdir;
private boolean captureOpenFiles;
/**
Expand Down