Beispiel #1
0
        public async Task <ICollection <GStoreObjectReplica> > ReadAll()
        {
            ICollection <ReaderWriterLockEnhancedSlim> locks = ObjectLocks.Values;

            IDictionary <ReaderWriterLockEnhancedSlim, Task <int> > lockTasks = new Dictionary <ReaderWriterLockEnhancedSlim, Task <int> >();

            foreach (ReaderWriterLockEnhancedSlim objectLock in locks)
            {
                lockTasks.Add(objectLock, Task.Run(objectLock.EnterReadLock));
            }

            IDictionary <ReaderWriterLockEnhancedSlim, int> lockWithReadIdSet = new Dictionary <ReaderWriterLockEnhancedSlim, int>();

            foreach (KeyValuePair <ReaderWriterLockEnhancedSlim, Task <int> > lockTask in lockTasks)
            {
                ReaderWriterLockEnhancedSlim objectLock = lockTask.Key;
                Task <int> task = lockTask.Value;
                lockWithReadIdSet.Add(objectLock, await task);
            }

            ISet <GStoreObjectReplica> values = new HashSet <GStoreObjectReplica>();

            foreach (GStoreObject gStoreObject in DataStore.Values)
            {
                // should lock partitions during this operation
                string partitionId = gStoreObject.Identifier.PartitionId;
                GStoreObjectReplica gStoreObjectReplica = new GStoreObjectReplica(gStoreObject, connectionManager.IsMasterForPartition(partitionId));
                values.Add(gStoreObjectReplica);
            }

            foreach (KeyValuePair <ReaderWriterLockEnhancedSlim, int> lockWithReadId in lockWithReadIdSet)
            {
                ReaderWriterLockEnhancedSlim objectLock = lockWithReadId.Key;
                int lockId = lockWithReadId.Value;
                objectLock.ExitReadLock(lockId);
            }

            return(values);
        }
Beispiel #2
0
 internal static DataObjectReplica FromObjectReplica(GStoreObjectReplica gStoreObjectReplica)
 {
     return(FromString(gStoreObjectReplica.Object.Identifier.PartitionId, gStoreObjectReplica.Object.Identifier.ObjectId, gStoreObjectReplica.Object.Value, gStoreObjectReplica.IsMaster));
 }