private IListener CreateQueueMessageToTriggerExecutionListener( ISharedContextProvider sharedContextProvider, SharedQueueWatcher sharedQueueWatcher, IStorageQueueClient queueClient, IStorageQueue hostBlobTriggerQueue, IStorageBlobClient blobClient, IBlobWrittenWatcher blobWrittenWatcher) { SharedBlobQueueListener sharedListener = sharedContextProvider.GetOrCreate <SharedBlobQueueListener>( new SharedBlobQueueListenerFactory(sharedQueueWatcher, queueClient, hostBlobTriggerQueue, blobClient, _queueConfiguration, _backgroundExceptionDispatcher, _log, blobWrittenWatcher)); sharedListener.Register(_functionId, _executor); return(new BlobListener(sharedListener)); }
public static async Task<WatchableCloudBlobStream> BindStreamAsync(IStorageBlob blob, ValueBindingContext context, IBlobWrittenWatcher blobWrittenWatcher) { IStorageBlockBlob blockBlob = blob as IStorageBlockBlob; if (blockBlob == null) { throw new InvalidOperationException("Cannot bind a page blob using an out string."); } BlobCausalityManager.SetWriter(blob.Metadata, context.FunctionInstanceId); CloudBlobStream rawStream = await blockBlob.OpenWriteAsync(context.CancellationToken); IBlobCommitedAction committedAction = new BlobCommittedAction(blob, blobWrittenWatcher); return new WatchableCloudBlobStream(rawStream, committedAction); }
public SharedBlobQueueListenerFactory( IStorageAccount hostAccount, SharedQueueWatcher sharedQueueWatcher, IStorageQueue hostBlobTriggerQueue, IQueueConfiguration queueConfiguration, IWebJobsExceptionHandler exceptionHandler, ILoggerFactory loggerFactory, IBlobWrittenWatcher blobWrittenWatcher) { _hostAccount = hostAccount ?? throw new ArgumentNullException(nameof(hostAccount)); _sharedQueueWatcher = sharedQueueWatcher ?? throw new ArgumentNullException(nameof(sharedQueueWatcher)); _hostBlobTriggerQueue = hostBlobTriggerQueue ?? throw new ArgumentNullException(nameof(hostBlobTriggerQueue)); _queueConfiguration = queueConfiguration ?? throw new ArgumentNullException(nameof(queueConfiguration)); _exceptionHandler = exceptionHandler ?? throw new ArgumentNullException(nameof(exceptionHandler)); _loggerFactory = loggerFactory; _blobWrittenWatcher = blobWrittenWatcher ?? throw new ArgumentNullException(nameof(blobWrittenWatcher)); }
public SharedBlobQueueListenerFactory( StorageAccount hostAccount, SharedQueueWatcher sharedQueueWatcher, CloudQueue hostBlobTriggerQueue, QueuesOptions queueOptions, IWebJobsExceptionHandler exceptionHandler, ILoggerFactory loggerFactory, IBlobWrittenWatcher blobWrittenWatcher) { _hostAccount = hostAccount ?? throw new ArgumentNullException(nameof(hostAccount)); _sharedQueueWatcher = sharedQueueWatcher ?? throw new ArgumentNullException(nameof(sharedQueueWatcher)); _hostBlobTriggerQueue = hostBlobTriggerQueue ?? throw new ArgumentNullException(nameof(hostBlobTriggerQueue)); _queueOptions = queueOptions ?? throw new ArgumentNullException(nameof(queueOptions)); _exceptionHandler = exceptionHandler ?? throw new ArgumentNullException(nameof(exceptionHandler)); _loggerFactory = loggerFactory; _blobWrittenWatcher = blobWrittenWatcher ?? throw new ArgumentNullException(nameof(blobWrittenWatcher)); }
public SharedBlobQueueListenerFactory( QueueServiceClient hostQueueServiceClient, SharedQueueWatcher sharedQueueWatcher, QueueClient hostBlobTriggerQueue, BlobsOptions blobsOptions, IWebJobsExceptionHandler exceptionHandler, ILoggerFactory loggerFactory, IBlobWrittenWatcher blobWrittenWatcher, FunctionDescriptor functionDescriptor) { _hostQueueServiceClient = hostQueueServiceClient ?? throw new ArgumentNullException(nameof(hostQueueServiceClient)); _sharedQueueWatcher = sharedQueueWatcher ?? throw new ArgumentNullException(nameof(sharedQueueWatcher)); _hostBlobTriggerQueue = hostBlobTriggerQueue ?? throw new ArgumentNullException(nameof(hostBlobTriggerQueue)); _blobsOptions = blobsOptions ?? throw new ArgumentNullException(nameof(blobsOptions)); _exceptionHandler = exceptionHandler ?? throw new ArgumentNullException(nameof(exceptionHandler)); _loggerFactory = loggerFactory; _blobWrittenWatcher = blobWrittenWatcher ?? throw new ArgumentNullException(nameof(blobWrittenWatcher)); _functionDescriptor = functionDescriptor; }
public void ExecuteAsync_IfBlobHasChanged_NotifiesWatcherAndReturnsSuccessResult() { // Arrange string functionId = "FunctionId"; IBlobETagReader eTagReader = CreateStubETagReader("NewETag"); Mock <IBlobWrittenWatcher> mock = new Mock <IBlobWrittenWatcher>(MockBehavior.Strict); mock.Setup(w => w.Notify(It.IsAny <IStorageBlob>())) .Verifiable(); IBlobWrittenWatcher blobWrittenWatcher = mock.Object; BlobQueueTriggerExecutor product = CreateProductUnderTest(eTagReader, blobWrittenWatcher); product.Register(functionId, CreateDummyTriggeredFunctionExecutor()); IStorageQueueMessage message = CreateMessage(functionId, "OriginalETag"); // Act Task <FunctionResult> task = product.ExecuteAsync(message, CancellationToken.None); // Assert task.WaitUntilCompleted(); mock.Verify(); Assert.True(task.Result.Succeeded); }
private static BlobQueueTriggerExecutor CreateProductUnderTest(IBlobETagReader eTagReader, IBlobCausalityReader causalityReader, IBlobWrittenWatcher blobWrittenWatcher) { IStorageBlobClient client = CreateClient(); return new BlobQueueTriggerExecutor(client, eTagReader, causalityReader, blobWrittenWatcher); }
public static async Task <ICacheAwareWriteObject> BindStreamCacheAwareAsync(BlobWithContainer <BlobBaseClient> blob, ValueBindingContext context, IBlobWrittenWatcher blobWrittenWatcher, IFunctionDataCache functionDataCache) { Stream blobStream = await BindStreamAsync(blob, context, blobWrittenWatcher).ConfigureAwait(false); return(new CacheableWriteBlob(blob, context.SharedMemoryMetadata, blobStream, functionDataCache)); }
public BlobCommittedAction(ICloudBlob blob, IBlobWrittenWatcher blobWrittenWatcher) { _blob = blob; _blobWrittenWatcher = blobWrittenWatcher; }
public BlobCommittedAction(BlobWithContainer <BlobBaseClient> blob, IBlobWrittenWatcher blobWrittenWatcher) { _blob = blob; _blobWrittenWatcher = blobWrittenWatcher; }
public BlobQueueTriggerExecutor(IBlobWrittenWatcher blobWrittenWatcher, ILogger <BlobListener> logger) : this(BlobCausalityReader.Instance, blobWrittenWatcher, logger) { }
private static BlobQueueTriggerExecutor CreateProductUnderTest(IBlobETagReader eTagReader, IBlobCausalityReader causalityReader, IBlobWrittenWatcher blobWrittenWatcher) { return(new BlobQueueTriggerExecutor(eTagReader, causalityReader, blobWrittenWatcher)); }
public BlobCommittedAction(IStorageBlob blob, IBlobWrittenWatcher blobWrittenWatcher) { _blob = blob; _blobWrittenWatcher = blobWrittenWatcher; }
public static async Task <WatchableCloudBlobStream> BindStreamAsync(ICloudBlob blob, ValueBindingContext context, IBlobWrittenWatcher blobWrittenWatcher) { var blockBlob = blob as CloudBlockBlob; if (blockBlob == null) { throw new InvalidOperationException("Cannot bind to page or append blobs using 'out string', 'TextWriter', or writable 'Stream' parameters."); } BlobCausalityManager.SetWriter(blob.Metadata, context.FunctionInstanceId); CloudBlobStream rawStream = await blockBlob.OpenWriteAsync(context.CancellationToken); IBlobCommitedAction committedAction = new BlobCommittedAction(blob, blobWrittenWatcher); return(new WatchableCloudBlobStream(rawStream, committedAction)); }
public BlobQueueTriggerExecutor(IStorageBlobClient client, IBlobWrittenWatcher blobWrittenWatcher) : this(client, BlobETagReader.Instance, BlobCausalityReader.Instance, blobWrittenWatcher) { }
private BlobQueueTriggerExecutor CreateProductUnderTest( IBlobCausalityReader causalityReader, IBlobWrittenWatcher blobWrittenWatcher) { return(new BlobQueueTriggerExecutor(causalityReader, BlobTriggerSource.LogsAndContainerScan, blobWrittenWatcher, _logger)); }
private static BlobQueueTriggerExecutor CreateProductUnderTest(IBlobETagReader eTagReader, IBlobCausalityReader causalityReader, IBlobWrittenWatcher blobWrittenWatcher) { IStorageBlobClient client = CreateClient(); return(new BlobQueueTriggerExecutor(client, eTagReader, causalityReader, blobWrittenWatcher)); }
public BlobQueueTriggerExecutor(IBlobCausalityReader causalityReader, IBlobWrittenWatcher blobWrittenWatcher) { _causalityReader = causalityReader; _blobWrittenWatcher = blobWrittenWatcher; _registrations = new ConcurrentDictionary <string, BlobQueueRegistration>(); }
private IListener CreateQueueMessageToTriggerExecutionListener( ISharedContextProvider sharedContextProvider, SharedQueueWatcher sharedQueueWatcher, IStorageQueueClient queueClient, IStorageQueue hostBlobTriggerQueue, IStorageBlobClient blobClient, IBlobWrittenWatcher blobWrittenWatcher) { SharedBlobQueueListener sharedListener = sharedContextProvider.GetOrCreate<SharedBlobQueueListener>( new SharedBlobQueueListenerFactory(sharedQueueWatcher, queueClient, hostBlobTriggerQueue, blobClient, _queueConfiguration, _backgroundExceptionDispatcher, _log, blobWrittenWatcher)); sharedListener.Register(_functionId, _executor); return new BlobListener(sharedListener); }
public static async Task <WatchableCloudBlobStream> BindStreamAsync(IStorageBlob blob, ValueBindingContext context, IBlobWrittenWatcher blobWrittenWatcher) { IStorageBlockBlob blockBlob = blob as IStorageBlockBlob; if (blockBlob == null) { throw new InvalidOperationException("Cannot bind a page blob using an out string."); } BlobCausalityManager.SetWriter(blob.Metadata, context.FunctionInstanceId); CloudBlobStream rawStream = await blockBlob.OpenWriteAsync(context.CancellationToken); IBlobCommitedAction committedAction = new BlobCommittedAction(blob, blobWrittenWatcher); return(new WatchableCloudBlobStream(rawStream, committedAction)); }
private static BlobQueueTriggerExecutor CreateProductUnderTest(IBlobETagReader eTagReader, IBlobCausalityReader causalityReader, IBlobWrittenWatcher blobWrittenWatcher) { return new BlobQueueTriggerExecutor(eTagReader, causalityReader, blobWrittenWatcher); }
private BlobQueueTriggerExecutor CreateProductUnderTest(IBlobWrittenWatcher blobWrittenWatcher) { IBlobCausalityReader causalityReader = CreateDummyCausalityReader(); return(CreateProductUnderTest(causalityReader, blobWrittenWatcher)); }
public BlobQueueTriggerExecutor(IBlobWrittenWatcher blobWrittenWatcher) : this(BlobETagReader.Instance, BlobCausalityReader.Instance, blobWrittenWatcher) { }
public BlobQueueTriggerExecutor(IBlobCausalityReader causalityReader, BlobTriggerSource blobTriggerSource, IBlobWrittenWatcher blobWrittenWatcher, ILogger <BlobListener> logger) { _causalityReader = causalityReader; _blobTriggerSource = blobTriggerSource; _blobWrittenWatcher = blobWrittenWatcher; _registrations = new ConcurrentDictionary <string, BlobQueueRegistration>(); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); }
public SharedBlobQueueListenerFactory(IFunctionExecutor executor, SharedQueueWatcher sharedQueueWatcher, IStorageQueueClient queueClient, IStorageQueue hostBlobTriggerQueue, IStorageBlobClient blobClient, IQueueConfiguration queueConfiguration, IBackgroundExceptionDispatcher backgroundExceptionDispatcher, TextWriter log, IBlobWrittenWatcher blobWrittenWatcher) { if (executor == null) { throw new ArgumentNullException("executor"); } if (sharedQueueWatcher == null) { throw new ArgumentNullException("sharedQueueWatcher"); } if (queueClient == null) { throw new ArgumentNullException("queueClient"); } if (hostBlobTriggerQueue == null) { throw new ArgumentNullException("hostBlobTriggerQueue"); } if (blobClient == null) { throw new ArgumentNullException("blobClient"); } if (queueConfiguration == null) { throw new ArgumentNullException("queueConfiguration"); } if (backgroundExceptionDispatcher == null) { throw new ArgumentNullException("backgroundExceptionDispatcher"); } if (log == null) { throw new ArgumentNullException("log"); } if (blobWrittenWatcher == null) { throw new ArgumentNullException("blobWrittenWatcher"); } _executor = executor; _sharedQueueWatcher = sharedQueueWatcher; _queueClient = queueClient; _hostBlobTriggerQueue = hostBlobTriggerQueue; _blobClient = blobClient; _queueConfiguration = queueConfiguration; _backgroundExceptionDispatcher = backgroundExceptionDispatcher; _log = log; _blobWrittenWatcher = blobWrittenWatcher; }
private BlobQueueTriggerExecutor CreateProductUnderTest( IBlobCausalityReader causalityReader, IBlobWrittenWatcher blobWrittenWatcher) { return(new BlobQueueTriggerExecutor(causalityReader, blobWrittenWatcher, _logger)); }
public static async Task <NotifyingBlobStream> BindStreamAsync(BlobWithContainer <BlobBaseClient> blob, ValueBindingContext context, IBlobWrittenWatcher blobWrittenWatcher) { var blockBlob = blob.BlobClient as BlockBlobClient; if (blockBlob == null) { throw new InvalidOperationException("Cannot bind to page or append blobs using 'out string', 'TextWriter', or writable 'Stream' parameters."); } var functionID = context.FunctionInstanceId; BlobProperties properties = await blockBlob.FetchPropertiesOrNullIfNotExistAsync().ConfigureAwait(false); Dictionary <string, string> metadata = new Dictionary <string, string>(); if (properties != null && properties.Metadata != null) { metadata = new Dictionary <string, string>(properties.Metadata); } BlobCausalityManager.SetWriter(metadata, functionID); BlockBlobOpenWriteOptions options = new BlockBlobOpenWriteOptions() { Metadata = metadata, }; Stream rawStream = await blockBlob.OpenWriteAsync(true, options).ConfigureAwait(false); IBlobCommitedAction committedAction = new BlobCommittedAction(blob, blobWrittenWatcher); return(await Task.FromResult(new NotifyingBlobStream(rawStream, committedAction)).ConfigureAwait(false)); }