O365 – Error al mover buzones para la nube “CreatingFolderHierarchy CommunicationErrorTransientException”
By: Caio Ribeiro César y Jesús Santaella
Cuando hablamos de mover buzones a la nube, debemos recordar los diferentes procesos involucrados. La solución de problemas del movimiento a la nube puede ser tan simple como aumentar la velocidad de carga o un poco mas complejo como el ejemplo de este artículo.
Primero debemos validar el tipo de movimiento, entendiendo cual es la tecnología utilizada para el movimiento del buzón en cuestión. En este ejemplo, estamos enfocando un movimiento híbrido (rich mailbox move), aunque existen otros métodos de migración utilizados por otras empresas - para una lista completa sugerimos que ingrese a este enlace.
Ya que sabemos que realizaremos una migración híbrida, estos son algunos de los factores que pueden estar involucrados:
- Rendimiento de Exchange Local -On-Premise- (para diversos problemas no específicos de latencia);
- Componentes Exchange Local (Mailbox Replication Service, MRSProxy);
- Permisos de Buzón;
- Organization Relationship;
- Pasos específicos del proceso de movimiento de buzones entre otros factores.
En resumen, el proceso de mover buzones para la nube en un ambiente híbrido consiste de 9 pasos:
- Inicio del proceso (recibo del comando New-RemoteMoveRequest por la conexión MRSProxy y consecuentemente MRS)
- Validación - MRS confirmará que el MSExchMailboxGuid es válido
- Creación del buzón que será migrado en el ambiente de la nube
- MRSProxy se conecta al ambiente local para encontrar el buzón de origen (nuevamente utilizando el valor MSExchMailboxGuid)
- El servicio de MRS localiza el buzón de origen y pasa la información al MRSProxy
- El servicio de MRS de la nube abre una conexión de Web Services con el CAS local
- La migración de datos inicia
- Al finalizar la copia de datos, el buzón del ambiente local es convertido a un buzón remoto (o mail enabled user "MEU")
- El buzón del ambiente de la nube es convertido de buzón remoto (MEU) a buzón
Qué sería un MEU? Cuando tenemos un ambiente híbrido, no podemos tener dos buzones para un único usuario. El objeto en si posee un atributo único de MSExchMailboxGuid para ser referenciado por los dos ambientes, por lo que en un ambiente es un buzón activo y en el otro un MEU.
El MEU no es mas que un objeto sin algunos valores de buzón, como: HomeMDB/HomeMTA/msExchHomeServerName, pero con un correo configurado en TargetAddress apuntando al buzón de destino (en este caso, para la nube).
Ahora que ya sabemos algunos de los específicos de la arquitectura de un movimiento de buzón de ambiente híbrido, vamos al problema.
Al intentar efectuar un movimiento local a la nube (o vice-versa), el movimiento para en 10% y envía mensaje de error:
3/4/2014 2:56:14 PM [BLUPR05MB258] The Microsoft Exchange Mailbox Replication service 'BLUPR05MB258.namprd05.prod.outlook.com' (15.0.888.6 caps:0FFF) is examining the request.
3/4/2014 2:56:20 PM [BLUPR05MB258] Connected to target mailbox caioc.onmicrosoft.com\9eb4312d-de3d-4184-a924-db6a2e54120b (Primary)', database 'CA-MDB', Mailbox server 'CASCAIOC.COM' Version 14.3 (Build 123.0), proxy server 'CASCAIOC.COM' 14.3.151.0 caps:05FFFF.
3/4/2014 2:56:21 PM [BLUPR05MB258] Connected to source mailbox 'caiocsource.onmicrosoft.com\9eb4312d-de3d-4184-a924-db6a2e54120b (Primary)', database 'NAMPR05DG017-db022', Mailbox server 'BLUPR05MB258.namprd05.prod.outlook.com' Version 15.0 (Build 888.0).
3/4/2014 2:56:22 PM [BLUPR05MB258] Request processing continued, stage CreatingFolderHierarchy.
3/4/2014 2:56:22 PM [BLUPR05MB258] Initializing folder hierarchy from mailbox 'caioc.onmicrosoft.com\9eb4312d-de3d-4184-a924-db6a2e54120b (Primary)': 207 folders total.
3/4/2014 2:56:22 PM [BLUPR05MB258] Folder creation progress: 0 folders created in mailbox 'caioc.onmicrosoft.com\9eb4312d-de3d-4184-a924-db6a2e54120b (Primary)'.
3/4/2014 2:59:19 PM [BLUPR05MB258] Transient error CommunicationErrorTransientException has occurred. The system will retry (1/60).
En este mensaje de error podemos entender que:
- El proceso en cuestión es la creación de la estructura de jerarquía de carpetas "CreatingFolderHirarchy"
- El buzón que será migrado posee 207 carpetas, por lo que el proceso falla antes de la migración de datos y ninguna carpeta es creada en el buzón
- El mensaje de error es "CommunicationErrorTransientException"
Tenemos un entendimiento general de lo que ocurre, pero necesitamos mas información para poder generar un plan de acción que pueda resolver el problema.
Ejecutamos entonces el siguiente comando para generar una descripción mas específica (verbose) en un archivo xml:
Get-MoveRequestStatistics caioc -IncludeReport | Export-Clixml caioc. xml
El archivo generado es relativamente grande y podemos tomar bastante tiempo para analizar, por lo que escogeremos crear u filtro, que nos traerá el último error recibido:
$stats = Import-CliXml caioc.xml
$stats.report.failures [-1]
RESULTADO:
Timestamp : 3/4/2014 7:04:16 PM
FailureType : CommunicationErrorTransientException
FailureCode : -2146233088
MapiLowLevelError : 0
FailureSide : Target
FailureSideInt : 2
ExceptionTypes : {Exchange, Transient, MRS, MRSTransient}
ExceptionTypesInt : {1, 2, 10, 11}
Message: The call to ' https://cascaioc.domain.com/EWS/mrsproxy.svc CASCAIOC.com (14.3.151.0 caps:05FFFF)' failed. Error details: The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs.. --> The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs.
MessageData :
DataContext : --------
Operation: IDestinationFolder.SetSearchCriteria
Operation: IDestinationFolder.SetSearchCriteria
OperationSide: Target
caioc.onmicrosoft.com\9eb4312d-de3d-4184-a924-db6a2e54120b (Primary)
Restriction: Restriction: AND[count:2, AND[count:7, NOT[CONTENT[ptag:0x1a001f(MessageClass), Prefix, IgnoreCase, val:[Tag:0x1a001f(MessageClass),Value:"IPM.Appointment"(string)]]]; NOT[CONTENT[ptag:0x1a001f(MessageClass), Prefix, IgnoreCase, val:[Tag:0x1a001f(MessageClass), Value:"IPM.Contact"(string)]]]; NOT[CONTENT[ptag:0x1a001f(MessageClass), Prefix, IgnoreCase, val:[Tag:0x1a001f(MessageClass),Value:"IPM.DistList"(string)]]];NOT[CONTENT[ptag:0x1a001f(MessageClass), Prefix, IgnoreCase, val:[Tag:0x1a001f(MessageClass), Value:"IPM.Activity"(string)]]]; NOT[CONTENT[ptag:0x1a001f(MessageClass), Prefix, IgnoreCase, val:[Tag:0x1a001f(MessageClass), Value:"IPM.StickyNote"(string)]]]; NOT[CONTENT[ptag:0x1a001f(MessageClass), IgnoreCase, val:[Tag:0x1a001f(MessageClass), Value:"IPM.Task"(string)]]]; NOT[CONTENT[ptag:0x1a001f(MessageClass), Prefix, IgnoreCase, val:[Tag:0x1a001f(MessageClass), Value:"IPM.Task."(string)]]]]; AND[count:2, AND[count:4, PROPERTY[ptag:0xe090102(ParentEntryId), NotEqual, val:[Tag:0xe090102(ParentEntryId), Value:cb = 46, lpb = 00000000297ED05D0A0CD211921C006097D538A20100BC42FDA7843F4947929EED9833A2252700000A6BE4BC0000]]; PROPERTY[ptag:0xe090102(ParentEntryId), NotEqual,
val:[Tag:0xe090102(ParentEntryId), Value:cb = 46, lpb = 00000000297ED05D0A0CD211921C006097D538A20100BC42FDA7843F4947929EED9833A2252700000A6BE4BD0000]]; PROPERTY[ptag:0xe090102(ParentEntryId), NotEqual, val:[Tag:0xe090102(ParentEntryId), Value:cb = 46, lpb 00000000297ED05D0A0CD211921C006097D538A20100BC42FDA7843F4947929EED9833A2252700000A6BE4BE0000]]; PROPERTY[ptag:0xe090102(ParentEntryId), NotEqual, val:[Tag:0xe090102(ParentEntryId), Value:cb = 46, lpb = 00000000297ED05D0A0CD211921C006097D538A20100BC42FDA7843F4947929EED9833A2252700000A6BE4BB0000]]]; AND[count:2, AND[count:2, NOT[OR[count:2, AND[count:3, OR[count:2, NOT[EXIST[ptag:0x10950003]]; PROPERTY[ptag:0x10950003, Equal, val:[Tag:0x10950003, Value:0(int)]]]; EXIST[ptag:0x10900003] PROPERTY[ptag:0x10900003, Equal, val:[Tag:0x10900003, Value:1(int)]]]; AND[count:2, PROPERTY[ptag:0x80920003(NamedProp), Equal, val:[Tag:0x80dd0003(NamedProp), Value:2(int)]]; EXIST[ptag:0x80920003(NamedProp)]]]]; OR[count:3, AND[count:2, EXIST[ptag:0xe2b0003]; BITMASK[ptag:0xe2b0003, NotEqualToZero, mask:0x1]]; AND[count:2, EXIST[ptag:0x10950003] PROPERTY[ptag:0x10950003, GreaterThan, val:[Tag:0x10950003, Value:0(int)]]]; AND[count:2, NOT[AND[count:2, PROPERTY[ptag:0x8093000b(NamedProp), NotEqual, val:[Tag:0x80e4000b(NamedProp), Value:True(bool)]]; PROPERTY[ptag:0x80940003(NamedProp), Equal, val:[Tag:0x80e50003(NamedProp), Value:2(int)]]]]; OR[count:2, CONTENT[ptag:0x1a001f(MessageClass), Prefix, IgnoreCase, val:[Tag:0x1a001f(MessageClass), Value:"IPM.Task."(string)]]; CONTENT[ptag:0x1a001f(MessageClass), IgnoreCase, val:[Tag:0x1a001f(MessageClass), Value:"IPM.Task"(string)]]]]]]; CONTENT[ptag:0x8003101f(NamedProp), IgnoreCase (mv), val:[Tag:0x8002101f(NamedProp), Value:"FII"(string)]]]]] EntryIDs: [count:1, [len=46, data=00000000297ED05D0A0CD211921C006097D538A20100007CA93C08CCD1119219006097D538A20000002882E50000]]
Flags: Recursive, NonContentIndexed, FailOnForeignEID
--------
Search folder: '/Finder/Sent directly to me, entryId [len=46, data=00000000297ED05D0A0CD211921C006097D538A20100ACCB14784BE62B4283BA485D3DB115F1000008147CF50000], parentId [len=46, data=00000000297ED05D0A0CD211921C006097D538A20100007CA93C08CCD1119219006097D538A20000002882EC0000]
DataContextData :
StackTrace : at Microsoft.Exchange.MailboxReplicationService.CommonUtils.CallWCFService[ExceptionT](Action serviceCall, String epAddress, Action`1 faultHandler, VersionInformation
serverVersion)
at Microsoft.Exchange.MailboxReplicationService.CommonUtils.CallService(Action serviceCall, String epAddress, VersionInformation serverVersion)
at Microsoft.Exchange.MailboxReplicationService.MailboxReplicationProxyClient.CallServiceWithTimeout(TimeSpan timeout, Action serviceCall) at Microsoft.Exchange.MailboxReplicationService.MailboxReplicationProxyClient.Microsoft.Exchange.MailboxReplicationService.IMailboxReplicationProxyService.IDestinationFolder_Se tSearchCriteria(Int64 folderHandle, RestrictionData restriction, Byte[][] entryIDs, Int32 searchFlags)
at Microsoft.Exchange.MailboxReplicationService.RemoteDestinationFolder.Microsoft.Exchange.MailboxReplicationService.IDestinationFolder.SetSearchCriteria(RestrictionData restriction, Byte[][] entryIds, SearchCriteriaFlags flags)
at Microsoft.Exchange.MailboxReplicationService.DestinationFolderWrapper.<>c__DisplayClass28.<Microsoft.Exchange.MailboxReplicationService.IDestinationFolder.SetSearchCriteria> b__27() at Microsoft.Exchange.MailboxReplicationService.ExecutionContext.Execute(Action operation)
at Microsoft.Exchange.MailboxReplicationService.ExecutionContextWrapper.Execute(Action operation, Boolean measure)
at Microsoft.Exchange.MailboxReplicationService.DestinationFolderWrapper.Microsoft.Exchange.MailboxReplicationService.IDestinationFolder.SetSearchCriteria(RestrictionData restriction, Byte[][] entryIds, SearchCriteriaFlags flags)
at Microsoft.Exchange.MailboxReplicationService.CommonUtils.ProcessKnownExceptions(ActionactionDelegate, FailureDelegate failureDelegate) at Microsoft.Exchange.MailboxReplicationService.MailboxCopierBase.CopyFolderProperties(FolderRecWrapper folderRec, ISourceFolder sourceFolder, IDestinationFolder destFolder, FolderRecDataFlags dataToCopy, Boolean& isContentAvailable)
at Microsoft.Exchange.MailboxReplicationService.MoveBaseJob.<>c__DisplayClass3a.<>c__DisplayClass3e.<CreateFolderHierarchy>b__37() at Microsoft.Exchange.MailboxReplicationService.ExecutionContext.Execute(Action operation)
at Microsoft.Exchange.MailboxReplicationService.MoveBaseJob.<>c__DisplayClass3a.<CreateFolderHierarchy>b__36(FolderRecWrapper folderRec, EnumFolderContext context)
at Microsoft.Exchange.MailboxReplicationService.FolderMap.EnumSingleFolder(FolderRecWrapper folderRec, EnumFolderContext ctx, EnumFolderCallback callback, EnumHierarchyFlags flags)
at Microsoft.Exchange.MailboxReplicationService.FolderMap.EnumSingleFolder(FolderRecWrapper folderRec, EnumFolderContext ctx, EnumFolderCallback callback, EnumHierarchyFlags flags)
at Microsoft.Exchange.MailboxReplicationService.FolderMap.EnumSingleFolder(FolderRecWrapper folderRec, EnumFolderContext ctx, EnumFolderCallback callback, EnumHierarchyFlags flags)
at Microsoft.Exchange.MailboxReplicationService.FolderMap.EnumerateSubtree(EnumHierarchyFlags flags, FolderRecWrapper root, EnumFolderCallback callback) at Microsoft.Exchange.MailboxReplicationService.MoveBaseJob.CreateFolderHierarchy()
at Microsoft.Exchange.MailboxReplicationService.CommonUtils.ProcessKnownExceptions(Action actionDelegate, FailureDelegate failureDelegate) InnerException : FaultException: The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults
(either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on
tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs
En este error podemos entender que el servicio de MRS tiene problemas copiando una carpeta de búsqueda "Sent directly to me", al crear la jerarquía del contenido.
Una carpeta de búsqueda es una carpeta virtual que permite visualizar todos los ítems de correo que comprendan ciertos criterios específicos de búsqueda. Por ejemplo, la carpeta de búsqueda de correos "No Leídos" permite visualizar todos los mensajes que no han sido leídos desde un solo lugar, incluso si los mensajes se encuentran en diferentes carpetas de correo.
Verificamos que esta carpeta de búsqueda está visible para el usuario final:
En este caso el usuario ha escogido remover la carpeta (ningún correo es removido, solamente la carpeta de búsqueda).
Otra opción es excluir todas las carpetas de búsqueda de almacén de información, ejecutando el comando "outlook.exe /cleanfinders"
En caso que la carpeta no aparezca en Outlook y la opción de cleanfinders no resuelva el problema, utilizamos la herramienta MFCMapi (modo online) para validar los permisos de la carpeta de búsqueda.
Efectúe la descarga de la herramienta MFCMAPI y configure el perfil de Outlook como en línea -online- (en caso contrario el archivo ost estará en uso y al abrir el buzón la herramienta tendrá mensajes de error).
Abra la herramienta y seleccione "Session" y "Logon and Display Store Table", luego seleccione el perfil deseado.
El buzón aparecerá en el GUI. Haga doble-clic en el buzón para que abra una nueva ventana:
En el recuadro izquierdo, encontramos la carpeta específica:
Al hacer clic con el botón derecho, existen las opciones de remover la carpeta o restablecer los permisos -ambas opciones resolverían el incidente.