示例#1
0
        public void ProcessHostStarted_UpdatesOrCreatesHostSnapshotIfLatest()
        {
            // Arrange
            const string hostId = "abc";

            string[]           expectedFunctionIds = new string[] { "a", "b" };
            DateTimeOffset     expectedHostVersion = DateTimeOffset.Now;
            IHostIndexManager  hostIndexManager    = CreateFakeHostIndexManager();
            IHostIndexer       product             = CreateProductUnderTest(hostIndexManager);
            HostStartedMessage message             = new HostStartedMessage
            {
                SharedQueueName = hostId,
                EnqueuedOn      = expectedHostVersion,
                Functions       = new FunctionDescriptor[]
                {
                    new FunctionDescriptor {
                        Id = expectedFunctionIds[0]
                    },
                    new FunctionDescriptor {
                        Id = expectedFunctionIds[1]
                    }
                }
            };

            // Act
            product.ProcessHostStarted(message);

            // Assert
            HostSnapshot hostSnapshot = hostIndexManager.Read(hostId);

            Assert.NotNull(hostSnapshot);
            Assert.Equal(expectedHostVersion, hostSnapshot.HostVersion);
            Assert.Equal(expectedFunctionIds, hostSnapshot.FunctionIds);
        }
 public Indexer(IPersistentQueueReader<PersistentQueueMessage> queueReader,
     IHostIndexer hostIndexer,
     IFunctionIndexer functionIndexer,
     IIndexerLogWriter logWriter)
 {
     _queueReader = queueReader;
     _hostIndexer = hostIndexer;
     _functionIndexer = functionIndexer;
     _logWriter = logWriter;
 }
示例#3
0
 public Indexer(IPersistentQueueReader <PersistentQueueMessage> queueReader,
                IHostIndexer hostIndexer,
                IFunctionIndexer functionIndexer,
                IIndexerLogWriter logWriter)
 {
     _queueReader     = queueReader;
     _hostIndexer     = hostIndexer;
     _functionIndexer = functionIndexer;
     _logWriter       = logWriter;
 }
示例#4
0
        public void ProcessHostStarted_IfHostConcurrentlyUpdated_DeletesKnownFunctionsIfLatest()
        {
            // Arrange
            const string hostId = "host";

            string[]          originalFunctionIds = new string[] { "a", "b" };
            string[]          finalFunctionIds    = new string[] { "b", "d" };
            IHostIndexManager concurrentlyRemoveFunctionsHostIndexManager = CreateStubHostIndexManager(
                existingSnapshot: CreateHostSnapshot(DateTimeOffset.MaxValue, finalFunctionIds), persistSucceeds: true);
            IFunctionIndexManager functionIndexManager = CreateFakeFunctionIndexManager();
            DateTimeOffset        earlierHostVersion   = DateTimeOffset.MinValue;

            AddFunctionToIndex(functionIndexManager, hostId, originalFunctionIds[0], earlierHostVersion);
            AddFunctionToIndex(functionIndexManager, hostId, originalFunctionIds[1], earlierHostVersion);
            IHostIndexer product = CreateProductUnderTest(concurrentlyRemoveFunctionsHostIndexManager,
                                                          functionIndexManager);
            HostStartedMessage message = new HostStartedMessage
            {
                SharedQueueName = hostId,
                EnqueuedOn      = DateTimeOffset.Now,
                Functions       = new FunctionDescriptor[]
                {
                    new FunctionDescriptor {
                        Id = originalFunctionIds[0]
                    },
                    new FunctionDescriptor {
                        Id = originalFunctionIds[1]
                    },
                    new FunctionDescriptor {
                        Id = "c"
                    },
                    new FunctionDescriptor {
                        Id = "d"
                    }
                }
            };

            // Act
            product.ProcessHostStarted(message);

            // Assert
            IEnumerable <VersionedMetadata> functions = functionIndexManager.List(hostId);

            Assert.NotNull(functions); // Guard
            IEnumerable <string> functionIds = functions.Select(f => f.Id).ToArray();

            Assert.Equal(finalFunctionIds, functionIds);
        }
示例#5
0
        public void ProcessHostStarted_UpdatesExistingFunctionsIfLatest()
        {
            // Arrange
            const string   hostId          = "host";
            DateTimeOffset expectedVersion = DateTimeOffset.Now;

            string[]          expectedFunctionIds = new string[] { "a", "b", "c" };
            IHostIndexManager hostIndexManager    = CreateStubHostIndexManager(
                CreateHostSnapshot(expectedVersion, expectedFunctionIds), persistSucceeds: true);
            IFunctionIndexManager functionIndexManager = CreateFakeFunctionIndexManager();
            DateTimeOffset        earlierHostVersion   = DateTimeOffset.MinValue;

            AddFunctionToIndex(functionIndexManager, hostId, expectedFunctionIds[0], earlierHostVersion);
            AddFunctionToIndex(functionIndexManager, hostId, expectedFunctionIds[1], earlierHostVersion);
            AddFunctionToIndex(functionIndexManager, hostId, expectedFunctionIds[2], earlierHostVersion);
            IHostIndexer       product = CreateProductUnderTest(hostIndexManager, functionIndexManager);
            HostStartedMessage message = new HostStartedMessage
            {
                SharedQueueName = hostId,
                EnqueuedOn      = expectedVersion,
                Functions       = new FunctionDescriptor[]
                {
                    new FunctionDescriptor {
                        Id = expectedFunctionIds[0]
                    },
                    new FunctionDescriptor {
                        Id = expectedFunctionIds[1]
                    },
                    new FunctionDescriptor {
                        Id = expectedFunctionIds[2]
                    }
                }
            };

            // Act
            product.ProcessHostStarted(message);

            // Assert
            IEnumerable <VersionedMetadata> functions = functionIndexManager.List(hostId);

            Assert.NotNull(functions); // Guard
            IEnumerable <string> functionIds = functions.Select(f => f.Id).ToArray();

            Assert.Equal(expectedFunctionIds, functionIds);
            IEnumerable <DateTimeOffset> versions = functions.Select(f => f.Version).ToArray();

            Assert.Equal(new DateTimeOffset[] { expectedVersion, expectedVersion, expectedVersion }, versions);
        }
        public UpgradeIndexer(IPersistentQueueReader <PersistentQueueMessage> queueReader,
                              IHostIndexer hostIndexer,
                              IFunctionIndexer functionIndexer,
                              IIndexerLogWriter logWriter,
                              IDashboardVersionManager dashboardVersionReader,
                              CloudBlobClient client)
            : base(queueReader, hostIndexer, functionIndexer, logWriter)
        {
            _dashboardVersionManager = dashboardVersionReader;
            _client         = client;
            _functionsStore = ConcurrentTextStore.CreateBlobStore(_client, DashboardContainerNames.Dashboard, DashboardDirectoryNames.FunctionsFlat);
            _logsStore      = ConcurrentTextStore.CreateBlobStore(_client, DashboardContainerNames.Dashboard, DashboardDirectoryNames.Logs);

            // From archive back to output
            _upgradeQueueReader = new PersistentQueueReader <PersistentQueueMessage>(client.GetContainerReference(ContainerNames.HostArchive),
                                                                                     client.GetContainerReference(ContainerNames.HostOutput));
        }
        public UpgradeIndexer(IPersistentQueueReader<PersistentQueueMessage> queueReader,
            IHostIndexer hostIndexer,
            IFunctionIndexer functionIndexer,
            IIndexerLogWriter logWriter,
            IDashboardVersionManager dashboardVersionReader,
            CloudBlobClient client)
            : base(queueReader, hostIndexer, functionIndexer, logWriter)
        {
            _dashboardVersionManager = dashboardVersionReader;
            _client = client;
            _functionsStore = ConcurrentTextStore.CreateBlobStore(_client, DashboardContainerNames.Dashboard, DashboardDirectoryNames.FunctionsFlat);
            _logsStore = ConcurrentTextStore.CreateBlobStore(_client, DashboardContainerNames.Dashboard, DashboardDirectoryNames.Logs);

            // From archive back to output
            _upgradeQueueReader = new PersistentQueueReader<PersistentQueueMessage>(client.GetContainerReference(ContainerNames.HostArchive),
                client.GetContainerReference(ContainerNames.HostOutput));
        }
示例#8
0
        public void ProcessHostStarted_UpdatesOrCreatesFunctionIndexVersionIfLatest()
        {
            // Arrange
            DateTimeOffset expectedVersion = DateTimeOffset.Now;
            FakeFunctionIndexVersionManager functionIndexVersionManager = new FakeFunctionIndexVersionManager();
            IHostIndexer       product = CreateProductUnderTest(functionIndexVersionManager);
            HostStartedMessage message = new HostStartedMessage
            {
                EnqueuedOn = expectedVersion
            };

            // Act
            product.ProcessHostStarted(message);

            // Assert
            Assert.Equal(expectedVersion, functionIndexVersionManager.Current);
        }
示例#9
0
        public void ProcessHostStarted_IfHostPreviouslyRemovedButProcessingAborted_DeletesKnownFunctionsIfLatest()
        {
            // Arrange
            const string   hostId      = "host";
            DateTimeOffset hostVersion = DateTimeOffset.Now;

            string[]          previouslyProcessedFunctionIds = new string[] { "a", "b", "c" };
            IHostIndexManager concurrentlyRemoveFunctionsHostIndexManager = CreateStubHostIndexManager(
                existingSnapshot: null, persistSucceeds: false);
            IFunctionIndexManager functionIndexManager = CreateFakeFunctionIndexManager();

            AddFunctionToIndex(functionIndexManager, hostId, previouslyProcessedFunctionIds[0], hostVersion);
            AddFunctionToIndex(functionIndexManager, hostId, previouslyProcessedFunctionIds[1], hostVersion);
            AddFunctionToIndex(functionIndexManager, hostId, previouslyProcessedFunctionIds[2], hostVersion);
            IHostIndexer product = CreateProductUnderTest(concurrentlyRemoveFunctionsHostIndexManager,
                                                          functionIndexManager);
            HostStartedMessage message = new HostStartedMessage
            {
                SharedQueueName = hostId,
                EnqueuedOn      = hostVersion,
                Functions       = new FunctionDescriptor[]
                {
                    new FunctionDescriptor {
                        Id = previouslyProcessedFunctionIds[0]
                    },
                    new FunctionDescriptor {
                        Id = previouslyProcessedFunctionIds[1]
                    },
                    new FunctionDescriptor {
                        Id = previouslyProcessedFunctionIds[2]
                    }
                }
            };

            // Act
            product.ProcessHostStarted(message);

            // Assert
            IEnumerable <VersionedMetadata> functions = functionIndexManager.List(hostId);

            Assert.NotNull(functions); // Guard
            IEnumerable <string> functionIds = functions.Select(f => f.Id).ToArray();

            Assert.Equal(new string[0], functionIds);
        }