Example #1
0
        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);
        }
Example #3
0
        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);
                }
            }
        }