Repository: incubator-reef
Updated Branches:
  refs/heads/master f2cd5975d -> d5cbc52d2


[REEF-638] Passing Mapper Specific configuration in IMRU

This addressed the issue by

   * introducing interface IPerMapperConfigs that allowes user to
     specify a list of configurations, one for each mapper.
   * making appropriate changes in IMRUDriver, IMRUClient, JobDefinition
     and JobDefinitionBuilder

JIRA:
  [REEF-638](https://issues.apache.org/jira/browse/REEF-638)

Pull Request:
  This closes #417


Project: http://git-wip-us.apache.org/repos/asf/incubator-reef/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-reef/commit/d5cbc52d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-reef/tree/d5cbc52d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-reef/diff/d5cbc52d

Branch: refs/heads/master
Commit: d5cbc52d20026b087729887523e9056533dde7eb
Parents: f2cd597
Author: Dhruv <[email protected]>
Authored: Tue Aug 25 23:28:54 2015 -0700
Committer: Markus Weimer <[email protected]>
Committed: Fri Sep 4 14:36:27 2015 -0700

----------------------------------------------------------------------
 .../API/IMRUJobDefinition.cs                    | 13 ++++++
 .../API/IMRUJobDefinitionBuilder.cs             | 18 ++++++++
 ...IMRUPerMapperConfigGeneratorConfiguration.cs | 45 ++++++++++++++++++++
 .../API/IPerMapperConfigGenerator.cs            | 35 +++++++++++++++
 .../API/PerMapConfigGeneratorSet.cs             | 31 ++++++++++++++
 .../OnREEF/Client/REEFIMRUClient.cs             | 22 +++++++++-
 .../OnREEF/Driver/IMRUDriver.cs                 | 26 ++++++++++-
 .../Org.Apache.REEF.IMRU.csproj                 |  3 ++
 8 files changed, 191 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/d5cbc52d/lang/cs/Org.Apache.REEF.IMRU/API/IMRUJobDefinition.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.IMRU/API/IMRUJobDefinition.cs 
b/lang/cs/Org.Apache.REEF.IMRU/API/IMRUJobDefinition.cs
index ed8c211..1d42711 100644
--- a/lang/cs/Org.Apache.REEF.IMRU/API/IMRUJobDefinition.cs
+++ b/lang/cs/Org.Apache.REEF.IMRU/API/IMRUJobDefinition.cs
@@ -17,6 +17,7 @@
  * under the License.
  */
 
+using System.Collections.Generic;
 using Org.Apache.REEF.Tang.Interface;
 
 namespace Org.Apache.REEF.IMRU.API
@@ -39,6 +40,7 @@ namespace Org.Apache.REEF.IMRU.API
         private readonly int _numberOfMappers;
         private readonly int _memoryPerMapper;
         private readonly int _updateTaskMemory;
+        private readonly ISet<IConfiguration> _perMapConfigGeneratorConfig;
 
         /// <summary>
         /// Constructor
@@ -55,6 +57,7 @@ namespace Org.Apache.REEF.IMRU.API
         /// PipelineDataConverter for TMapInput</param>
         /// <param name="partitionedDatasetConfiguration">Configuration of 
partitioned 
         /// dataset</param>
+        /// <param name="perMapConfigGeneratorConfig">Per mapper 
configuration</param>
         /// <param name="numberOfMappers">Number of mappers</param>
         /// <param name="memoryPerMapper">Per Mapper memory.</param>
         /// <param name="jobName">Job name</param>
@@ -67,6 +70,7 @@ namespace Org.Apache.REEF.IMRU.API
             IConfiguration mapOutputPipelineDataConverterConfiguration,
             IConfiguration mapInputPipelineDataConverterConfiguration,
             IConfiguration partitionedDatasetConfiguration,
+            ISet<IConfiguration> perMapConfigGeneratorConfig,
             int numberOfMappers,
             int memoryPerMapper,
             int updateTaskMemory,
@@ -84,6 +88,7 @@ namespace Org.Apache.REEF.IMRU.API
             _jobName = jobName;
             _memoryPerMapper = memoryPerMapper;
             _updateTaskMemory = updateTaskMemory;
+            _perMapConfigGeneratorConfig = perMapConfigGeneratorConfig;
         }
 
         /// <summary>
@@ -184,5 +189,13 @@ namespace Org.Apache.REEF.IMRU.API
         {
             get { return _updateTaskMemory; }
         }
+
+        /// <summary>
+        /// Per mapper configuration
+        /// </summary>
+        internal ISet<IConfiguration> PerMapConfigGeneratorConfig
+        {
+            get { return _perMapConfigGeneratorConfig; }
+        }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/d5cbc52d/lang/cs/Org.Apache.REEF.IMRU/API/IMRUJobDefinitionBuilder.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.IMRU/API/IMRUJobDefinitionBuilder.cs 
b/lang/cs/Org.Apache.REEF.IMRU/API/IMRUJobDefinitionBuilder.cs
index 730fb54..985c372 100644
--- a/lang/cs/Org.Apache.REEF.IMRU/API/IMRUJobDefinitionBuilder.cs
+++ b/lang/cs/Org.Apache.REEF.IMRU/API/IMRUJobDefinitionBuilder.cs
@@ -18,9 +18,13 @@
  */
 
 using System;
+using System.Collections.Generic;
+using Org.Apache.REEF.IMRU.OnREEF.Parameters;
 using Org.Apache.REEF.Network.Group.Driver.Impl;
+using Org.Apache.REEF.Tang.Formats;
 using Org.Apache.REEF.Tang.Interface;
 using Org.Apache.REEF.Tang.Implementations.Tang;
+using Org.Apache.REEF.Tang.Util;
 using Org.Apache.REEF.Utilities.Diagnostics;
 using Org.Apache.REEF.Utilities.Logging;
 
@@ -46,6 +50,7 @@ namespace Org.Apache.REEF.IMRU.API
         private IConfiguration _mapOutputPipelineDataConverterConfiguration;
         private IConfiguration _mapInputPipelineDataConverterConfiguration;
         private IConfiguration _partitionedDatasetConfiguration;
+        private readonly ISet<IConfiguration> _perMapConfigGeneratorConfig;
 
         private static readonly IConfiguration EmptyConfiguration =
             TangFactory.GetTang().NewConfigurationBuilder().Build();
@@ -60,6 +65,7 @@ namespace Org.Apache.REEF.IMRU.API
             _partitionedDatasetConfiguration = EmptyConfiguration;
             _memoryPerMapper = 512;
             _updateTaskMemory = 512;
+            _perMapConfigGeneratorConfig = new HashSet<IConfiguration>();
         }
 
         /// <summary>
@@ -203,6 +209,17 @@ namespace Org.Apache.REEF.IMRU.API
         }
 
         /// <summary>
+        /// Sets Per Map Configuration
+        /// </summary>
+        /// <param name="perMapperConfig">Mapper configs</param>
+        /// <returns></returns>
+        public IMRUJobDefinitionBuilder SetPerMapConfigurations(IConfiguration 
perMapperConfig)
+        {
+            _perMapConfigGeneratorConfig.Add(perMapperConfig);
+            return this;
+        }
+
+        /// <summary>
         /// Instantiate the IMRUJobDefinition.
         /// </summary>
         /// <returns>The IMRUJobDefintion configured.</returns>
@@ -250,6 +267,7 @@ namespace Org.Apache.REEF.IMRU.API
                 _mapOutputPipelineDataConverterConfiguration,
                 _mapInputPipelineDataConverterConfiguration,
                 _partitionedDatasetConfiguration,
+                _perMapConfigGeneratorConfig,
                 _numberOfMappers,
                 _memoryPerMapper,
                 _updateTaskMemory,

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/d5cbc52d/lang/cs/Org.Apache.REEF.IMRU/API/IMRUPerMapperConfigGeneratorConfiguration.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.IMRU/API/IMRUPerMapperConfigGeneratorConfiguration.cs 
b/lang/cs/Org.Apache.REEF.IMRU/API/IMRUPerMapperConfigGeneratorConfiguration.cs
new file mode 100644
index 0000000..b8a85bc
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.IMRU/API/IMRUPerMapperConfigGeneratorConfiguration.cs
@@ -0,0 +1,45 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+using Org.Apache.REEF.IMRU.OnREEF.Parameters;
+using Org.Apache.REEF.Tang.Formats;
+using Org.Apache.REEF.Tang.Util;
+
+namespace Org.Apache.REEF.IMRU.API
+{
+    /// <summary>
+    /// A configuration module for per mapper configuration.
+    /// </summary>
+    public sealed class IMRUPerMapperConfigGeneratorConfiguration : 
ConfigurationModuleBuilder
+    {
+        /// <summary>
+        /// The IPerMapperConfigs to use.
+        /// </summary>
+        public static readonly RequiredImpl<IPerMapperConfigGenerator> 
PerMapperConfigGenerator =
+            new RequiredImpl<IPerMapperConfigGenerator>();
+
+        /// <summary>
+        /// Configuration module
+        /// </summary>
+        public static ConfigurationModule ConfigurationModule =
+            new IMRUPerMapperConfigGeneratorConfiguration()
+                .BindSetEntry(GenericType<PerMapConfigGeneratorSet>.Class, 
PerMapperConfigGenerator)
+                .Build();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/d5cbc52d/lang/cs/Org.Apache.REEF.IMRU/API/IPerMapperConfigGenerator.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.IMRU/API/IPerMapperConfigGenerator.cs 
b/lang/cs/Org.Apache.REEF.IMRU/API/IPerMapperConfigGenerator.cs
new file mode 100644
index 0000000..cf902a6
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.IMRU/API/IPerMapperConfigGenerator.cs
@@ -0,0 +1,35 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using Org.Apache.REEF.Tang.Interface;
+
+namespace Org.Apache.REEF.IMRU.API
+{
+    /// <summary>
+    /// Class returning mapper specific configuration
+    /// </summary>
+    public interface IPerMapperConfigGenerator
+    {
+        /// <summary>
+        /// returns per mapper configuration
+        /// </summary>
+        /// <param name="currentPartitionNumber">current partition 
number</param>
+        /// <param name="totalMappers">total number of mappers</param>
+        /// <returns>mapper configuration</returns>
+        IConfiguration GetMapperConfiguration(int currentPartitionNumber, int 
totalMappers);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/d5cbc52d/lang/cs/Org.Apache.REEF.IMRU/API/PerMapConfigGeneratorSet.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.IMRU/API/PerMapConfigGeneratorSet.cs 
b/lang/cs/Org.Apache.REEF.IMRU/API/PerMapConfigGeneratorSet.cs
new file mode 100644
index 0000000..064a647
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.IMRU/API/PerMapConfigGeneratorSet.cs
@@ -0,0 +1,31 @@
+#region LICENSE
+
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#endregion
+
+using System.Collections.Generic;
+using Org.Apache.REEF.Tang.Annotations;
+
+namespace Org.Apache.REEF.IMRU.API
+{
+    [NamedParameter("Set of mapper specfic configuration generators", 
"setofmapconfig")]
+    internal sealed class PerMapConfigGeneratorSet : 
Name<ISet<IPerMapperConfigGenerator>>
+    {
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/d5cbc52d/lang/cs/Org.Apache.REEF.IMRU/OnREEF/Client/REEFIMRUClient.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.IMRU/OnREEF/Client/REEFIMRUClient.cs 
b/lang/cs/Org.Apache.REEF.IMRU/OnREEF/Client/REEFIMRUClient.cs
index 9466086..752aa42 100644
--- a/lang/cs/Org.Apache.REEF.IMRU/OnREEF/Client/REEFIMRUClient.cs
+++ b/lang/cs/Org.Apache.REEF.IMRU/OnREEF/Client/REEFIMRUClient.cs
@@ -15,8 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+using System;
 using System.Collections.Generic;
+using System.Data;
 using System.Globalization;
+using System.Linq;
 using Org.Apache.REEF.Client.API;
 using Org.Apache.REEF.Driver;
 using Org.Apache.REEF.IMRU.API;
@@ -27,8 +30,12 @@ using Org.Apache.REEF.Network.Group.Driver;
 using Org.Apache.REEF.Network.Group.Driver.Impl;
 using Org.Apache.REEF.Tang.Annotations;
 using Org.Apache.REEF.Tang.Formats;
+using Org.Apache.REEF.Tang.Implementations.Configuration;
 using Org.Apache.REEF.Tang.Implementations.Tang;
+using Org.Apache.REEF.Tang.Interface;
 using Org.Apache.REEF.Tang.Util;
+using Org.Apache.REEF.Utilities.Diagnostics;
+using Org.Apache.REEF.Utilities.Logging;
 
 namespace Org.Apache.REEF.IMRU.OnREEF.Client
 {
@@ -40,6 +47,8 @@ namespace Org.Apache.REEF.IMRU.OnREEF.Client
     /// <typeparam name="TResult">The return type of the 
computation.</typeparam>
     internal sealed class REEFIMRUClient<TMapInput, TMapOutput, TResult> : 
IIMRUClient<TMapInput, TMapOutput, TResult>
     {
+        private static readonly Logger Logger = 
Logger.GetLogger(typeof(IMRUDriver<TMapInput, TMapOutput, TResult>));
+
         private readonly IREEFClient _reefClient;
         private readonly JobSubmissionBuilderFactory 
_jobSubmissionBuilderFactory;
         private readonly AvroConfigurationSerializer _configurationSerializer;
@@ -61,6 +70,16 @@ namespace Org.Apache.REEF.IMRU.OnREEF.Client
         IEnumerable<TResult> IIMRUClient<TMapInput, TMapOutput, 
TResult>.Submit(IMRUJobDefinition jobDefinition)
         {
             string driverId = string.Format("IMRU-{0}-Driver", 
jobDefinition.JobName);
+            IConfiguration overallPerMapConfig = null;
+            
+            try
+            {
+                overallPerMapConfig = 
Configurations.Merge(jobDefinition.PerMapConfigGeneratorConfig.ToArray());
+            }
+            catch (Exception e)
+            {
+                Exceptions.Throw(e, "Issues in merging PerMapCOnfigGenerator 
configurations", Logger);
+            }
 
             // The driver configuration contains all the needed bindings.
             var imruDriverConfiguration = 
TangFactory.GetTang().NewConfigurationBuilder(new[]
@@ -86,7 +105,8 @@ namespace Org.Apache.REEF.IMRU.OnREEF.Client
                         (jobDefinition.NumberOfMappers + 
1).ToString(CultureInfo.InvariantCulture))
                     .BindImplementation(GenericType<IGroupCommDriver>.Class, 
GenericType<GroupCommDriver>.Class)
                     .Build(),
-                jobDefinition.PartitionedDatasetConfiguration
+                jobDefinition.PartitionedDatasetConfiguration,
+                overallPerMapConfig
             })
                 .BindNamedParameter(typeof (SerializedMapConfiguration),
                     
_configurationSerializer.ToString(jobDefinition.MapFunctionConfiguration))

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/d5cbc52d/lang/cs/Org.Apache.REEF.IMRU/OnREEF/Driver/IMRUDriver.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.IMRU/OnREEF/Driver/IMRUDriver.cs 
b/lang/cs/Org.Apache.REEF.IMRU/OnREEF/Driver/IMRUDriver.cs
index 0655835..452298c 100644
--- a/lang/cs/Org.Apache.REEF.IMRU/OnREEF/Driver/IMRUDriver.cs
+++ b/lang/cs/Org.Apache.REEF.IMRU/OnREEF/Driver/IMRUDriver.cs
@@ -17,12 +17,15 @@
 
 using System;
 using System.Collections.Concurrent;
+using System.Collections.Generic;
 using System.Globalization;
+using System.Linq;
 using Org.Apache.REEF.Common.Tasks;
 using Org.Apache.REEF.Driver;
 using Org.Apache.REEF.Driver.Context;
 using Org.Apache.REEF.Driver.Evaluator;
 using Org.Apache.REEF.Driver.Task;
+using Org.Apache.REEF.IMRU.API;
 using Org.Apache.REEF.IMRU.OnREEF.IMRUTasks;
 using Org.Apache.REEF.IMRU.OnREEF.MapInputWithControlMessage;
 using Org.Apache.REEF.IMRU.OnREEF.Parameters;
@@ -62,16 +65,19 @@ namespace Org.Apache.REEF.IMRU.OnREEF.Driver
         private readonly TaskStarter _groupCommTaskStarter;
         private IConfiguration _tcpPortProviderConfig;
         private readonly ConcurrentStack<string> _taskIdStack;
+        private readonly ConcurrentStack<IConfiguration> 
_perMapperConfiguration;
         private readonly ConcurrentStack<IPartitionDescriptor> 
_partitionDescriptorStack;
         private readonly int _coresPerMapper;
         private readonly int _coresForUpdateTask;
         private readonly int _memoryPerMapper;
         private readonly int _memoryForUpdateTask;
+        private readonly ISet<IPerMapperConfigGenerator> _perMapperConfigs;
         private bool _allocatedUpdateTaskEvaluator;
         private readonly ConcurrentBag<ICompletedTask> _completedTasks;
             
         [Inject]
         private IMRUDriver(IPartitionedDataSet dataSet,
+            [Parameter(typeof(PerMapConfigGeneratorSet))] 
ISet<IPerMapperConfigGenerator> perMapperConfigs,
             ConfigurationManager configurationManager,
             IEvaluatorRequestor evaluatorRequestor,
             [Parameter(typeof (TcpPortRangeStart))] int startingPort,
@@ -90,6 +96,7 @@ namespace Org.Apache.REEF.IMRU.OnREEF.Driver
             _coresForUpdateTask = coresForUpdateTask;
             _memoryPerMapper = memoryPerMapper;
             _memoryForUpdateTask = memoryForUpdateTask;
+            _perMapperConfigs = perMapperConfigs;
             _allocatedUpdateTaskEvaluator = false;
             _completedTasks = new ConcurrentBag<ICompletedTask>();
 
@@ -103,6 +110,7 @@ namespace Org.Apache.REEF.IMRU.OnREEF.Driver
             _groupCommTaskStarter = new TaskStarter(_groupCommDriver, 
_dataSet.Count + 1);
 
             _taskIdStack = new ConcurrentStack<string>();
+            _perMapperConfiguration = new ConcurrentStack<IConfiguration>();
             _partitionDescriptorStack = new 
ConcurrentStack<IPartitionDescriptor>();
             ConstructTaskIdAndPartitionDescriptorStack();
         }
@@ -231,6 +239,17 @@ namespace Org.Apache.REEF.IMRU.OnREEF.Driver
                     return;
                 }
 
+                IConfiguration mapSpecificConfig;
+
+                if (!_perMapperConfiguration.TryPop(out mapSpecificConfig))
+                {
+                    Logger.Log(Level.Warning,
+                        "No per map configuration exist for the active context 
{0}. Disposing the context.",
+                        activeContext.Id);
+                    activeContext.Dispose();
+                    return;
+                }
+
                 var partialTaskConf =
                     TangFactory.GetTang()
                         .NewConfigurationBuilder(new[]
@@ -239,7 +258,8 @@ namespace Org.Apache.REEF.IMRU.OnREEF.Driver
                                 .Set(TaskConfiguration.Identifier, taskId)
                                 .Set(TaskConfiguration.Task, 
GenericType<MapTaskHost<TMapInput, TMapOutput>>.Class)
                                 .Build(),
-                            _configurationManager.MapFunctionConfiguration
+                            _configurationManager.MapFunctionConfiguration,
+                            mapSpecificConfig
                         })
                         .Build();
 
@@ -365,6 +385,10 @@ namespace Org.Apache.REEF.IMRU.OnREEF.Driver
                 string id = IMRUConstants.MapTaskPrefix + "-Id" + counter + 
"-Version0";
                 _taskIdStack.Push(id);
                 _partitionDescriptorStack.Push(partitionDescriptor);
+
+                var emptyConfig = 
TangFactory.GetTang().NewConfigurationBuilder().Build();
+                IConfiguration config = 
_perMapperConfigs.Aggregate(emptyConfig, (current, configGenerator) => 
Configurations.Merge(current, configGenerator.GetMapperConfiguration(counter, 
_dataSet.Count)));
+                _perMapperConfiguration.Push(config);
                 counter++;
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/d5cbc52d/lang/cs/Org.Apache.REEF.IMRU/Org.Apache.REEF.IMRU.csproj
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.IMRU/Org.Apache.REEF.IMRU.csproj 
b/lang/cs/Org.Apache.REEF.IMRU/Org.Apache.REEF.IMRU.csproj
index b47aff7..e3fecf9 100644
--- a/lang/cs/Org.Apache.REEF.IMRU/Org.Apache.REEF.IMRU.csproj
+++ b/lang/cs/Org.Apache.REEF.IMRU/Org.Apache.REEF.IMRU.csproj
@@ -49,8 +49,11 @@ under the License.
     <Compile Include="API\IMRUJobDefinitionBuilder.cs" />
     <Compile Include="API\IMRUMapConfiguration.cs" />
     <Compile Include="API\IMRUReduceFunctionConfiguration.cs" />
+    <Compile Include="API\IMRUPerMapperConfigGeneratorConfiguration.cs" />
     <Compile Include="API\IMRUUpdateConfiguration.cs" />
     <Compile Include="API\IUpdateFunction.cs" />
+    <Compile Include="API\IPerMapperConfigGenerator.cs" />
+    <Compile Include="API\PerMapConfigGeneratorSet.cs" />
     <Compile Include="API\UpdateResult.cs" />
     <Compile Include="InProcess\IMRURunner.cs" />
     <Compile Include="InProcess\InProcessIMRUClient.cs" />

Reply via email to