/// <summary> /// method to perform depth-first search and write the parameters of every /// queue in JSON format. /// </summary> /// <param name="dumpGenerator"> /// JsonGenerator object which takes the dump and flushes /// to a writer object /// </param> /// <param name="rootQueues">the top-level queues</param> /// <exception cref="Org.Codehaus.Jackson.JsonGenerationException"/> /// <exception cref="System.IO.IOException"/> private static void DumpConfiguration(JsonGenerator dumpGenerator, ICollection <Queue > rootQueues) { foreach (Queue queue in rootQueues) { dumpGenerator.WriteStartObject(); dumpGenerator.WriteStringField("name", queue.GetName()); dumpGenerator.WriteStringField("state", queue.GetState().ToString()); AccessControlList submitJobList = null; AccessControlList administerJobsList = null; if (queue.GetAcls() != null) { submitJobList = queue.GetAcls()[ToFullPropertyName(queue.GetName(), QueueACL.SubmitJob .GetAclName())]; administerJobsList = queue.GetAcls()[ToFullPropertyName(queue.GetName(), QueueACL .AdministerJobs.GetAclName())]; } string aclsSubmitJobValue = " "; if (submitJobList != null) { aclsSubmitJobValue = submitJobList.GetAclString(); } dumpGenerator.WriteStringField("acl_submit_job", aclsSubmitJobValue); string aclsAdministerValue = " "; if (administerJobsList != null) { aclsAdministerValue = administerJobsList.GetAclString(); } dumpGenerator.WriteStringField("acl_administer_jobs", aclsAdministerValue); dumpGenerator.WriteFieldName("properties"); dumpGenerator.WriteStartArray(); if (queue.GetProperties() != null) { foreach (KeyValuePair <object, object> property in queue.GetProperties()) { dumpGenerator.WriteStartObject(); dumpGenerator.WriteStringField("key", (string)property.Key); dumpGenerator.WriteStringField("value", (string)property.Value); dumpGenerator.WriteEndObject(); } } dumpGenerator.WriteEndArray(); ICollection <Queue> childQueues = queue.GetChildren(); dumpGenerator.WriteFieldName("children"); dumpGenerator.WriteStartArray(); if (childQueues != null && childQueues.Count > 0) { DumpConfiguration(dumpGenerator, childQueues); } dumpGenerator.WriteEndArray(); dumpGenerator.WriteEndObject(); } }
/// <summary> /// Dumps the configuration of hierarchy of queues with /// the xml file path given. /// </summary> /// <remarks> /// Dumps the configuration of hierarchy of queues with /// the xml file path given. It is to be used directly ONLY FOR TESTING. /// </remarks> /// <param name="out">the writer object to which dump is written to.</param> /// <param name="configFile">the filename of xml file</param> /// <exception cref="System.IO.IOException"/> internal static void DumpConfiguration(TextWriter @out, string configFile, Configuration conf) { if (conf != null && conf.Get(DeprecatedQueueConfigurationParser.MapredQueueNamesKey ) != null) { return; } JsonFactory dumpFactory = new JsonFactory(); JsonGenerator dumpGenerator = dumpFactory.CreateJsonGenerator(@out); QueueConfigurationParser parser; bool aclsEnabled = false; if (conf != null) { aclsEnabled = conf.GetBoolean(MRConfig.MrAclsEnabled, false); } if (configFile != null && !string.Empty.Equals(configFile)) { parser = new QueueConfigurationParser(configFile, aclsEnabled); } else { parser = GetQueueConfigurationParser(null, false, aclsEnabled); } dumpGenerator.WriteStartObject(); dumpGenerator.WriteFieldName("queues"); dumpGenerator.WriteStartArray(); DumpConfiguration(dumpGenerator, parser.GetRoot().GetChildren()); dumpGenerator.WriteEndArray(); dumpGenerator.WriteEndObject(); dumpGenerator.Flush(); }
/// <exception cref="System.IO.IOException"/> private void WriteObject(JsonGenerator jg, object value) { if (value == null) { jg.WriteNull(); } else { Type c = value.GetType(); if (c.IsArray) { jg.WriteStartArray(); int len = Runtime.GetArrayLength(value); for (int j = 0; j < len; j++) { object item = Runtime.GetArrayValue(value, j); WriteObject(jg, item); } jg.WriteEndArray(); } else { if (value is Number) { Number n = (Number)value; jg.WriteNumber(n.ToString()); } else { if (value is bool) { bool b = (bool)value; jg.WriteBoolean(b); } else { if (value is CompositeData) { CompositeData cds = (CompositeData)value; CompositeType comp = cds.GetCompositeType(); ICollection <string> keys = comp.KeySet(); jg.WriteStartObject(); foreach (string key in keys) { WriteAttribute(jg, key, cds.Get(key)); } jg.WriteEndObject(); } else { if (value is TabularData) { TabularData tds = (TabularData)value; jg.WriteStartArray(); foreach (object entry in tds.Values()) { WriteObject(jg, entry); } jg.WriteEndArray(); } else { jg.WriteString(value.ToString()); } } } } } } }