/// <exception cref="System.IO.IOException"/> public virtual void WriteApplicationACLs(IDictionary <ApplicationAccessType, string > appAcls) { DataOutputStream @out = this.writer.PrepareAppendKey(-1); ApplicationAclKey.Write(@out); @out.Close(); @out = this.writer.PrepareAppendValue(-1); foreach (KeyValuePair <ApplicationAccessType, string> entry in appAcls) { @out.WriteUTF(entry.Key.ToString()); @out.WriteUTF(entry.Value); } @out.Close(); }
/// <summary>Returns ACLs for the application.</summary> /// <remarks> /// Returns ACLs for the application. An empty map is returned if no ACLs are /// found. /// </remarks> /// <returns>a map of the Application ACLs.</returns> /// <exception cref="System.IO.IOException"/> public virtual IDictionary <ApplicationAccessType, string> GetApplicationAcls() { // TODO Seek directly to the key once a comparator is specified. TFile.Reader.Scanner aclScanner = reader.CreateScanner(); AggregatedLogFormat.LogKey key = new AggregatedLogFormat.LogKey(); IDictionary <ApplicationAccessType, string> acls = new Dictionary <ApplicationAccessType , string>(); while (!aclScanner.AtEnd()) { TFile.Reader.Scanner.Entry entry = aclScanner.Entry(); key.ReadFields(entry.GetKeyStream()); if (key.ToString().Equals(ApplicationAclKey.ToString())) { DataInputStream valueStream = entry.GetValueStream(); while (true) { string appAccessOp = null; string aclString = null; try { appAccessOp = valueStream.ReadUTF(); } catch (EOFException) { // Valid end of stream. break; } try { aclString = valueStream.ReadUTF(); } catch (EOFException e) { throw new YarnRuntimeException("Error reading ACLs", e); } acls[ApplicationAccessType.ValueOf(appAccessOp)] = aclString; } } aclScanner.Advance(); } return(acls); }