예제 #1
0
 internal static unsafe StatefulServicePartition FromNative(NativeTypes.FABRIC_STATEFUL_SERVICE_PARTITION_QUERY_RESULT_ITEM statefulPartitionResultItem)
 {
     NativeTypes.FABRIC_SERVICE_PARTITION_INFORMATION *nativePartitionInformation = (NativeTypes.FABRIC_SERVICE_PARTITION_INFORMATION *)statefulPartitionResultItem.PartitionInformation;
     NativeTypes.FABRIC_STATEFUL_SERVICE_PARTITION_QUERY_RESULT_ITEM_EX1 *statefulPartitionResultItemEx1 = (NativeTypes.FABRIC_STATEFUL_SERVICE_PARTITION_QUERY_RESULT_ITEM_EX1 *)statefulPartitionResultItem.Reserved;
     return(new StatefulServicePartition(
                ServicePartitionInformation.FromNative(*nativePartitionInformation),
                statefulPartitionResultItem.TargetReplicaSetSize,
                statefulPartitionResultItem.MinReplicaSetSize,
                (HealthState)statefulPartitionResultItem.HealthState,
                (ServicePartitionStatus)statefulPartitionResultItem.PartitionStatus,
                TimeSpan.FromSeconds(statefulPartitionResultItem.LastQuorumLossDurationInSeconds),
                Epoch.FromNative(statefulPartitionResultItemEx1->PrimaryEpoch)));
 }
예제 #2
0
        internal static unsafe BackupOperationResult FromNative(IntPtr pointer)
        {
            var nativeBackupOperationResult = *(NativeBackupRestoreTypes.FABRIC_BACKUP_OPERATION_RESULT *)pointer;
            var managedResult = new BackupOperationResult
            {
                PartitionId  = nativeBackupOperationResult.PartitionId,
                ServiceName  = NativeTypes.FromNativeString(nativeBackupOperationResult.ServiceName),
                ErrorCode    = nativeBackupOperationResult.ErrorCode,
                TimeStampUtc = NativeTypes.FromNativeFILETIME(nativeBackupOperationResult.TimeStampUtc),
                Message      = NativeTypes.FromNativeString(nativeBackupOperationResult.Message),
                OperationId  = nativeBackupOperationResult.OperationId,
            };

            // Copy backup details in case of success
            if (managedResult.ErrorCode == 0)
            {
                managedResult.BackupId                = nativeBackupOperationResult.BackupId;
                managedResult.BackupLocation          = NativeTypes.FromNativeString(nativeBackupOperationResult.BackupLocation);
                managedResult.EpochOfLastBackupRecord = Epoch.FromNative(nativeBackupOperationResult.EpochOfLastBackupRecord);
                managedResult.LsnOfLastBackupRecord   = nativeBackupOperationResult.LsnOfLastBackupRecord;
            }

            return(managedResult);
        }
예제 #3
0
        private Task UpdateEpochHelper(IntPtr nativeEpoch, long previousEpochLastSequenceNumber, CancellationToken cancellationToken)
        {
            Epoch epoch = Epoch.FromNative(nativeEpoch);

            return(this.stateProvider.UpdateEpochAsync(epoch, previousEpochLastSequenceNumber, cancellationToken));
        }