@Override
 public void afterOperation(
     LSMOperationType opType, List<ILSMComponent> oldComponents, ILSMComponent newComponent)
     throws HyracksDataException {
   if (newComponent != null) {
     LSMRTreeDiskComponent rtreeComponent = (LSMRTreeDiskComponent) newComponent;
     putLSNIntoMetadata(rtreeComponent.getRTree(), oldComponents);
     putLSNIntoMetadata(rtreeComponent.getBTree(), oldComponents);
   }
 }
 @Override
 public long getComponentLSN(List<ILSMComponent> diskComponents) throws HyracksDataException {
   if (diskComponents == null) {
     // Implies a flush IO operation.
     synchronized (this) {
       long lsn = mutableLastLSNs[readIndex];
       return lsn;
     }
   }
   // Get max LSN from the diskComponents. Implies a merge IO operation or Recovery operation.
   long maxLSN = -1;
   for (Object o : diskComponents) {
     LSMRTreeDiskComponent rtreeComponent = (LSMRTreeDiskComponent) o;
     maxLSN = Math.max(getTreeIndexLSN(rtreeComponent.getRTree()), maxLSN);
   }
   return maxLSN;
 }