示例#1
0
        /// <summary>
        /// Adds iFolder move request to the iFolder move queue
        /// </summary>
        /// <param name="ifDataMove">iFolder data move object</param>
        /// <returns> false in all cases.</returns>
        static public bool Add(iFolderDataMove ifDataMove)
        {
            log.Debug("Add: Adding iFolder id {0}:{1} to the Data Move Queue", ifDataMove.iFolderID, ifDataMove.iFolderName);

            lock ( eventQueue )
            {
                if (eventQueue.Count != 0)
                {
                    Array ifDataMoveList = Array.CreateInstance(typeof(iFolderDataMove), eventQueue.Count);
                    eventQueue.CopyTo(ifDataMoveList, 0);
                    foreach (iFolderDataMove ifDM in ifDataMoveList)
                    {
                        if (ifDM.iFolderID == ifDataMove.iFolderID)
                        {
                            log.Debug("Add: iFolder {0}:{1} is already in the queue", ifDataMove.iFolderID, ifDataMove.iFolderName);
                            return(false);
                        }
                    }
                }
                if (currentiFolderID == ifDataMove.iFolderID)
                {
                    log.Debug("Not adding in the queue since this iFolder is being synced now. {0}", currentiFolderID);
                    return(false);
                }
                eventQueue.Enqueue(ifDataMove);
                log.Debug("Add: iFolder id {0} is included in the queue", ifDataMove.iFolderID);
            }
            return(false);
        }
示例#2
0
        /// <summary>
        /// IsiFolderAlreadyInQueueOrMoved check whether iFolder is in queue or already moved.
        /// </summary>
        /// <param name="ifDataMove">iFolder data move object</param>
        /// <returns> True if the iFolder is already moved,
        /// false if iFolder is not moved or in queue</returns>
        static public bool IsiFolderAlreadyInQueueOrMoved(iFolderDataMove ifDataMove)
        {
            log.Debug("IsiFolderAlreadyInQueueOrMoved: Checking iFolder id {0}:{1} in the Data Move Queue", ifDataMove.iFolderID, ifDataMove.iFolderName);

            lock ( eventQueue )
            {
                if (eventQueue.Count != 0)
                {
                    Array ifDataMoveList = Array.CreateInstance(typeof(iFolderDataMove), eventQueue.Count);
                    eventQueue.CopyTo(ifDataMoveList, 0);
                    foreach (iFolderDataMove ifDM in ifDataMoveList)
                    {
                        if (ifDM.iFolderID == ifDataMove.iFolderID)
                        {
                            log.Debug("IsiFolderAlreadyInQueueOrMoved: iFolder {0}:{1} is already in the queue", ifDataMove.iFolderID, ifDataMove.iFolderName);
                            return(false);
                        }
                    }
                }
            }

            store  = Store.GetStore();
            domain = store.GetDomain(store.DefaultDomain);
            Member member = domain.GetMemberByID(ifDataMove.MemberUserID);

            if (member != null)
            {
                int state = member.iFolderMoveState(domain.ID, false, ifDataMove.iFolderID, 0, 0);
                if (state == (int)iFolderMoveState.Completed)
                {
                    log.Debug("State completed for: {0}", ifDataMove.iFolderName);
                    member.iFolderMoveState(domain.ID, true, ifDataMove.iFolderID, 0, 0);
                    return(true);
                }
                else if (state == (int)iFolderMoveState.NotStarted)
                {
                    log.Debug("State already moved for: {0}", ifDataMove.iFolderName);
                    if (store.GetCollectionByID(ifDataMove.iFolderID) != null)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
示例#3
0
        /// <summary>
        /// Processes the Data Move queue, either periodically or based on the manual reset event.
        /// </summary>
        /// <returns> Nothing.</returns>
        static private void ProcessEvents()
        {
            store  = Store.GetStore();
            domain = store.GetDomain(store.DefaultDomain);
            iFolderDataMove ifDataMove = null;
            Member          member     = null;

            while (down == false)
            {
                queueEvent.WaitOne(QueEventScheduleTime * 1000, false);
                if (down == true)
                {
                    break;
                }
                QueueProcessingState = true;
                while (true)
                {
                    ifDataMove = null;
                    lock ( eventQueue )
                    {
                        if (eventQueue.Count == 0)
                        {
                            queueEvent.Reset();
                            break;
                        }
                        ifDataMove = eventQueue.Dequeue() as iFolderDataMove;
                    }
                    try
                    {
                        member = domain.GetMemberByID(ifDataMove.MemberUserID);
                        if (member != null)
                        {
                            currentiFolderID = ifDataMove.iFolderID;
                            member.iFolderMoveState(domain.ID, true, ifDataMove.iFolderID, (int)iFolderMoveState.Started, 0);
                            if (!Collection.DownloadCollectionLocally(ifDataMove.iFolderID, ifDataMove.iFolderName, ifDataMove.DomainID, ifDataMove.HostID, ifDataMove.DirNodeID, ifDataMove.MemberUserID, ifDataMove.colMemberNodeID, ifDataMove.iFolderLocalPath, ifDataMove.sourceFileCount, ifDataMove.sourceDirCount))
                            {
                                currentiFolderID = "";
                                log.Debug("downloadifolder returned false for {0} ", ifDataMove.iFolderID);
                                Add(ifDataMove);
                                Thread.Sleep(5 * 1000);
                            }
                            else
                            {
                                /// Recreate the catalog entry...
                                Simias.Server.Catalog.RecreateEntryForCollection(ifDataMove.iFolderID);
                                member.iFolderMoveState(domain.ID, true, ifDataMove.iFolderID, (int)iFolderMoveState.Completed, 0);
                            }
                            currentiFolderID = "";
                        }
                        else
                        {
                            log.Debug("member {0} is not present in domain ", ifDataMove.MemberUserID);
                            log.Debug("removing {0} from Data move queue", ifDataMove.iFolderID);
                        }
                    }
                    catch (Exception e)
                    {
                        log.Debug("Data ProcessEvents: Expection {0} {1} received for {2}", e.Message, e.StackTrace, ifDataMove.iFolderID);
                        Add(ifDataMove);
                        Thread.Sleep(30 * 1000);
                    }
                    finally
                    {
                        currentiFolderID = "";
                    }
                }
                QueueProcessingState = false;
            }
        }