Example #1
0
 @Override
 public void _processEventIO(InjectionEventI event, Object... args) throws IOException {
   if (event == InjectionEvent.DATANODE_PROCESS_RAID_TASK) {
     int namespaceId = nn.getNamespaceID();
     DataNode dn = (DataNode) args[0];
     RaidTaskCommand rtc = (RaidTaskCommand) args[1];
     RaidTask[] tasks = rtc.tasks;
     for (RaidTask rw : tasks) {
       // Generate all parity block locally instead of sending them remotely
       try {
         for (int idx = 0; idx < rw.toRaidIdxs.length; idx++) {
           Block blk = rw.stripeBlocks[rw.toRaidIdxs[idx]];
           blk.setNumBytes(blockSize);
           BlockDataFile.Writer dataOut =
               ((BlockInlineChecksumWriter)
                       dn.getFSDataset()
                           .writeToBlock(namespaceId, blk, blk, false, false, 1, 512))
                   .getBlockDataFile()
                   .getWriter(0);
           dataOut.write(bytes);
           dataOut.close();
           dn.finalizeAndNotifyNamenode(namespaceId, blk);
         }
       } catch (IOException ioe) {
         LOG.warn(ioe);
       }
     }
   }
 }