//  do not store locations of last block
 /// <summary>
 /// Serialize a
 /// <see cref="INodeFile"/>
 /// node
 /// </summary>
 /// <param name="node">The node to write</param>
 /// <param name="out">
 /// The
 /// <see cref="System.IO.DataOutputStream"/>
 /// where the fields are written
 /// </param>
 /// <param name="writeBlock">Whether to write block information</param>
 /// <exception cref="System.IO.IOException"/>
 public static void WriteINodeFile(INodeFile file, DataOutput @out, bool writeUnderConstruction
                                   )
 {
     WriteLocalName(file, @out);
     @out.WriteLong(file.GetId());
     @out.WriteShort(file.GetFileReplication());
     @out.WriteLong(file.GetModificationTime());
     @out.WriteLong(file.GetAccessTime());
     @out.WriteLong(file.GetPreferredBlockSize());
     WriteBlocks(file.GetBlocks(), @out);
     SnapshotFSImageFormat.SaveFileDiffList(file, @out);
     if (writeUnderConstruction)
     {
         if (file.IsUnderConstruction())
         {
             @out.WriteBoolean(true);
             FileUnderConstructionFeature uc = file.GetFileUnderConstructionFeature();
             WriteString(uc.GetClientName(), @out);
             WriteString(uc.GetClientMachine(), @out);
         }
         else
         {
             @out.WriteBoolean(false);
         }
     }
     WritePermissionStatus(file, @out);
 }
        // Helper function that writes an INodeUnderConstruction
        // into the output stream
        //
        /// <exception cref="System.IO.IOException"/>
        internal static void WriteINodeUnderConstruction(DataOutputStream @out, INodeFile
                                                         cons, string path)
        {
            WriteString(path, @out);
            @out.WriteLong(cons.GetId());
            @out.WriteShort(cons.GetFileReplication());
            @out.WriteLong(cons.GetModificationTime());
            @out.WriteLong(cons.GetPreferredBlockSize());
            WriteBlocks(cons.GetBlocks(), @out);
            cons.GetPermissionStatus().Write(@out);
            FileUnderConstructionFeature uc = cons.GetFileUnderConstructionFeature();

            WriteString(uc.GetClientName(), @out);
            WriteString(uc.GetClientMachine(), @out);
            @out.WriteInt(0);
        }
Exemple #3
0
            /// <exception cref="System.IO.IOException"/>
            internal void SerializeFilesUCSection(OutputStream @out)
            {
                IDictionary <string, INodeFile> ucMap = fsn.GetFilesUnderConstruction();

                foreach (KeyValuePair <string, INodeFile> entry in ucMap)
                {
                    string    path = entry.Key;
                    INodeFile file = entry.Value;
                    FsImageProto.FilesUnderConstructionSection.FileUnderConstructionEntry.Builder b =
                        FsImageProto.FilesUnderConstructionSection.FileUnderConstructionEntry.NewBuilder
                            ().SetInodeId(file.GetId()).SetFullPath(path);
                    FsImageProto.FilesUnderConstructionSection.FileUnderConstructionEntry e = ((FsImageProto.FilesUnderConstructionSection.FileUnderConstructionEntry
                                                                                                )b.Build());
                    e.WriteDelimitedTo(@out);
                }
                parent.CommitSection(summary, FSImageFormatProtobuf.SectionName.FilesUnderconstruction
                                     );
            }
        public virtual void TestCommitWithInvalidGenStamp()
        {
            Path file = new Path("/file");
            FSDataOutputStream @out = null;

            try
            {
                @out = dfs.Create(file, (short)1);
                INodeFile     fileNode = dir.GetINode4Write(file.ToString()).AsFile();
                ExtendedBlock previous = null;
                Block         newBlock = DFSTestUtil.AddBlockToFile(cluster.GetDataNodes(), dfs, cluster.
                                                                    GetNamesystem(), file.ToString(), fileNode, dfs.GetClient().GetClientName(), previous
                                                                    , 100);
                Block newBlockClone = new Block(newBlock);
                previous = new ExtendedBlock(cluster.GetNamesystem().GetBlockPoolId(), newBlockClone
                                             );
                previous.SetGenerationStamp(123);
                try
                {
                    dfs.GetClient().GetNamenode().Complete(file.ToString(), dfs.GetClient().GetClientName
                                                               (), previous, fileNode.GetId());
                    NUnit.Framework.Assert.Fail("should throw exception because invalid genStamp");
                }
                catch (IOException e)
                {
                    NUnit.Framework.Assert.IsTrue(e.ToString().Contains("Commit block with mismatching GS. NN has "
                                                                        + newBlock + ", client submits " + newBlockClone));
                }
                previous = new ExtendedBlock(cluster.GetNamesystem().GetBlockPoolId(), newBlock);
                bool complete = dfs.GetClient().GetNamenode().Complete(file.ToString(), dfs.GetClient
                                                                           ().GetClientName(), previous, fileNode.GetId());
                NUnit.Framework.Assert.IsTrue("should complete successfully", complete);
            }
            finally
            {
                IOUtils.Cleanup(null, @out);
            }
        }