private void processSplits() { FileSplitMetadata fileSplitMetadata = null; while (true) { checkWorkerFreezed(); lock (splitMetadataList) { if (splitMetadataList.Count > 0) { fileSplitMetadata = splitMetadataList[0]; splitMetadataList.RemoveAt(0); } else { Monitor.Wait(splitMetadataList); continue; } } WorkerTaskMetadata workerTaskMetadata = communicator.getTaskFromClient(fileSplitMetadata); mapTask.SplitId = fileSplitMetadata.SplitId; mapTask.Hasthresholdreached = false; TaskResult taskResult = mapTask.processMapTask(workerTaskMetadata, fileSplitMetadata, workerId); if (taskResult != null) { addTaskToTaskResults(taskResult); } } }
public WorkerTaskMetadata getTaskFromClient(FileSplitMetadata splitMetadata) { if (clientProxy == null) { clientProxy = (IClient)Activator.GetObject( typeof(IClient), Worker.CLIENT_URL); } WorkerTaskMetadata workerMetadata = clientProxy.receiveTaskRequest(splitMetadata); return(workerMetadata); }
internal TaskResult processMapTask(WorkerTaskMetadata workerTaskMetadata, FileSplitMetadata splitMetaData, int workerId) { // String chunk = Unzip(workerTaskMetadata.Chunk); String chunk = workerTaskMetadata.Chunk; //long lineNumber = splitMetaData.StartPosition; long bytesProcessed = 0; long totalSize = chunk.Length * sizeof(Char); string line; result = new List <KeyValuePair <string, string> >(); Assembly assembly = Assembly.Load(workerTaskMetadata.Code); Type classType = null; object mapperObj = null; // Walk through each type in the assembly looking for our class foreach (Type type in assembly.GetTypes()) { if (type.IsClass == true) { if (type.FullName.EndsWith("." + workerTaskMetadata.MapperClassName)) { // create an instance of the object classType = type; mapperObj = Activator.CreateInstance(classType); } } } using (StringReader reader = new System.IO.StringReader(chunk)) { while (true) { line = reader.ReadLine(); if (line != null) { lock (SlowLock) { if (!IsMapSuspended) { runMapperForLine(classType, mapperObj, line); bytesProcessed += line.Length * sizeof(char) + (Environment.NewLine.Length * sizeof(Char)); setTaskStatus(splitMetaData, totalSize, bytesProcessed, workerId); } else { //clear the results and wait for next map result = new List <KeyValuePair <string, string> >(); break; } } } else { break; } } if (!IsMapSuspended) { return(createTaskResultBoject(splitMetaData.SplitId)); } else { IsMapSuspended = false; return(null); } } }