Пример #1
0
        public void ReleaseReadTableLock(string tblname)
        {
            lock (mReadLockList)
            {
                mTableUnitManager.ReleaseReadTableLock(tblname);
                int nRet  = mReadLockList.Count;
                int index = -1;
                foreach (string name in mReadLockList)
                {
                    index++;
                    if (name == tblname)
                    {
                        break;
                    }
                }

                if (index != -1)
                {
                    mReadLockList.RemoveAt(index);
                }
                string sRet = "success";

                if (nRet < 1 || (nRet > 1 && !mMultiLock))
                {
                    sRet = string.Format("Fail {0} locks", nRet);
                }

                string message = string.Format("ReleaseReadTableLock {0}: dbname = {1}, tblname = {2}", sRet, mDBName, tblname);
                mLogHelper.LogMessage(mClientKey, message, LogType.ReadWriteTableLock);
            }
        }
Пример #2
0
        public object[] UTGetTableID(string tblname, object[] ids)
        {
            string[] dbnames = AppTableUnite.GetUniteDBNames();
            object[] ret     = null;
            string   message = string.Empty;

            foreach (string dbname in dbnames)
            {
                TableUnitManager mgr = TableHelper.GetTableUnitManangerByDbname(dbname);
                mgr.AcquireReadTableLock(dbname);
                message = string.Format("AcquireReadTableLock: dbname = {0}, tblname = {1}.", dbname, tblname);
                mLogHelper.LogMessage(mClientKey, message, LogType.ReadWriteTableLock);
            }
            try
            {
                ret     = AppTableUnite.GetTableID(mDBName, tblname, ids);
                message = string.Format("get new id({0}) for {1}", ret[0], tblname);
                mLogHelper.LogMessage(mClientKey, message, LogType.Modify);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                foreach (string dbname in dbnames)
                {
                    TableUnitManager mgr = TableHelper.GetTableUnitManangerByDbname(dbname);
                    mgr.ReleaseReadTableLock(dbname);
                    message = string.Format("ReleaseReadTableLock: dbname = {0}, tblname = {1}.", dbname, tblname);
                    mLogHelper.LogMessage(mClientKey, message, LogType.ReadWriteTableLock);
                }
            }

            return(ret);
        }
Пример #3
0
        public int[] UTUniteTable(string tblname, string todbname, string[] dblist)
        {
            string dbs     = TableHelper.ArrayToString(dblist);
            string message = string.Format("Begin unite table. tblname = {0}, dbnames = {1}.", tblname, dbs);

            mLogHelper.LogMessage(mClientKey, message, LogType.Modify);

            int[] nRet   = new int[] { -1, -1 };
            bool  bExist = true;

            foreach (string db in dblist)
            {
                if (!UTExistDatabase(db))
                {
                    bExist = false;
                }
            }
            if (UTExistDatabase(todbname) && bExist)
            {
                foreach (string db in dblist)
                {
                    TableUnitManager mgr = TableHelper.GetTableUnitManangerByDbname(db);
                    if (db == todbname)
                    {
                        mgr.AcquireWriteTableLock(tblname);
                        mUniteWriteLockList.Add(tblname);
                        message = string.Format("AcquireWriteTableLock: dbname = {0}, tblname = {1}.", db, tblname);
                    }
                    else
                    {
                        mgr.AcquireReadTableLock(tblname);
                        mUniteReadLockList.Add(tblname);
                        message = string.Format("AcquireReadTableLock: dbname = {0}, tblname = {1}.", db, tblname);
                    }
                    mLogHelper.LogMessage(mClientKey, message, LogType.ReadWriteTableLock);
                }

                try
                {
                    nRet    = AppTableUnite.UniteTables(tblname, todbname, dblist);
                    message = string.Format("End unit table. modify {0} rows, add {1} rows.", nRet[1], nRet[0]);
                    mLogHelper.LogMessage(mClientKey, message, LogType.Modify);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    foreach (string db in dblist)
                    {
                        TableUnitManager mgr = TableHelper.GetTableUnitManangerByDbname(db);
                        if (db == todbname)
                        {
                            mgr.ReleaseWriteTableLock(tblname);
                            mUniteWriteLockList.RemoveAt(0);
                            message = string.Format("ReleaseWriteTableLock: dbname = {0}, tblname = {1}.", db, tblname);
                        }
                        else
                        {
                            mgr.ReleaseReadTableLock(tblname);
                            mUniteReadLockList.RemoveAt(0);
                            message = string.Format("ReleaseWriteTableLock: dbname = {0}, tblname = {1}.", db, tblname);
                        }
                        mLogHelper.LogMessage(mClientKey, message, LogType.ReadWriteTableLock);
                    }
                }
            }

            return(nRet);
        }