2011-05-25 1 views
0

J'utilise NHibernate avec Velocity comme second fournisseur de niveau de cache.NHibernate avec Appfabric Velocity se bloque après la suppression de la région

Je dois effacer une zone. J'utilise ce code:

_sessionFactory.EvictQueries("Authorization"); 
var authCache = _sessionFactory.GetSecondLevelCacheRegion("Authorization"); 
authCache.Clear(); 

authCache.Clear() appelle en fait la méthode NHibernate.Caches.Velocity.VelocityClient.Cache.

La zone est effacée correctement. Mais juste après cela, une nouvelle session est ouverte et une requête est faite contre une entité précédemment mise en cache. Il essaie de GetAndLock dans VelocityClient. Coup. Le AppFabricCachingService se bloque (voir le journal des événements ci-dessous)

Est-ce que je vide le cache correctement? Quelle est mon erreur?

=====================

EVEN

AppFabric Caching service crashed with exception {System.Runtime.CallbackException: Async Callback threw an exception. ---> System.NullReferenceException: Object reference not set to an instance of an object. 
    at Microsoft.ApplicationServer.Caching.MultiDirectoryHashtable.GetPlaceHolderObject(Object key) 
    at Microsoft.ApplicationServer.Caching.MultiDirectoryHashtable.PreProcess(MDHObjectNode oldObjectNode, MDHObjectNode& newObjectNode, MDHOperationInfo& operationInfo) 
    at Microsoft.ApplicationServer.Caching.MultiDirectoryHashtable.PutNodeInSlot(MDHOperationInfo& operationInfo, MDHDirectoryNode dir, Int32 slotIndex) 
    at Microsoft.ApplicationServer.Caching.MultiDirectoryHashtable.TryOperation(MDHOperationInfo& operationInfo) 
    at Microsoft.ApplicationServer.Caching.MultiDirectoryHashtable.PerformOperation(MDHOperationInfo& operationInfo) 
    at Microsoft.ApplicationServer.Caching.MultiDirectoryHashtable.GetAndLock(Object key, TimeSpan lockTimeOut, Boolean lockKey, DMOperationCallBack preOperation, DMOperationCallBack postOperation, Object opState) 
    at Microsoft.ApplicationServer.Caching.DMHashContainer.GetAndLock(Object key, TimeSpan lockTimeOut, Boolean lockKey, Object opState) 
    at Microsoft.ApplicationServer.Caching.ObjectManager.GetAndLock(String cacheName, String regionName, Object key, TimeSpan lockTimeOut, DataCacheLockHandle& lHandle, Boolean lockKey, Object opState) 
    at Microsoft.ApplicationServer.Caching.VelocityDataStore.ProcessWriteRequest(RequestBody request) 
    at Microsoft.ApplicationServer.Caching.VelocityDataStore.ProcessMessageRequest(RequestBody request) 
    at Microsoft.ApplicationServer.Caching.DistributedObjectManager.OnReceiveMessageFromRemoteDRM(IReplyContext replyContext) 
    at Microsoft.ApplicationServer.Caching.WcfTransportChannel.InvokeCallback(Message message, IChannelContainer container) 
    at Microsoft.ApplicationServer.Caching.WcfServerChannel.InvokeCallback(Message message, IChannelContainer container) 
    at Microsoft.ApplicationServer.Caching.WcfServerChannel.CompleteProcessing(IAsyncResult result) 
    at Microsoft.ApplicationServer.Caching.WcfTransportChannel.Receive(IAsyncResult result) 
    at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously) 
    --- End of inner exception stack trace --- 
    at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously) 
    at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously, Exception exception) 
    at System.ServiceModel.Channels.SynchronizedMessageSource.ReceiveAsyncResult.OnReceiveComplete(Object state) 
    at System.ServiceModel.Channels.SessionConnectionReader.OnAsyncReadComplete(Object state) 
    at System.ServiceModel.Channels.StreamConnection.OnRead(IAsyncResult result) 
    at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result) 
    at System.Net.LazyAsyncResult.Complete(IntPtr userToken) 
    at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken) 
    at System.Net.Security.NegotiateStream.ProcessFrameBody(Int32 readBytes, Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.NegotiateStream.ReadCallback(AsyncProtocolRequest asyncRequest) 
    at System.Net.AsyncProtocolRequest.CompleteRequest(Int32 result) 
    at System.Net.FixedSizeReader.CheckCompletionBeforeNextRead(Int32 bytes) 
    at System.Net.FixedSizeReader.ReadCallback(IAsyncResult transportResult) 
    at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously) 
    at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously, Exception exception) 
    at System.ServiceModel.Channels.ConnectionStream.ReadAsyncResult.OnAsyncReadComplete(Object state) 
    at System.ServiceModel.Channels.SocketConnection.FinishRead() 
    at System.ServiceModel.Channels.SocketConnection.AsyncReadCallback(Boolean haveResult, Int32 error, Int32 bytesRead) 
    at System.ServiceModel.Channels.OverlappedContext.CompleteCallback(UInt32 error, UInt32 numBytes, NativeOverlapped* nativeOverlapped) 
    at System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped) 
    at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)}. Check debug log for more information 

Répondre

1

Il est un savoir AF bug cache. La suppression de la région entraîne un plantage lorsque des éléments de cache verrouillés sont présents. Voir ce fil:

Exception when clearing system regions

La solution est: au lieu de clair, vous devez faire un redémarrage du cluster dans la console inclus AF Cache PS.

Questions connexes