private void CheckServerProtocolSignatures() { Log.WriteLine("Checking {0}-Server protocol signatures...", cluster_config.RunningMode); int my_server_id = (cluster_config.RunningMode == RunningMode.Server) ? MyPartitionId : -1; var storage = StorageTable.Where((_, idx) => idx != my_server_id).FirstOrDefault() as RemoteStorage; CheckProtocolSignatures_impl(storage, cluster_config.RunningMode, RunningMode.Server); }
/// <inheritdoc/> public override bool Open(ClusterConfig config, bool nonblocking) { this.cluster_config = config; Log.WriteLines(config.OutputCurrentConfig()); if (config.RunningMode == RunningMode.Embedded) { return(SetupEmbeddedMemoryCloud()); } if (_InstanceList(config.RunningMode).Count == 0 && config.RunningMode != RunningMode.Client) { Log.WriteLine(LogLevel.Warning, "No distributed instances configured. Turning on local test mode."); TrinityConfig.LocalTest = true; } server_count = cluster_config.Servers.Count; my_partition_id = _GetPartitionId(config); my_proxy_id = _GetProxyId(config); m_storageTable = new IStorage[server_count]; if (server_count == 0 && config.RunningMode != RunningMode.Proxy) { Log.WriteLine(LogLevel.Error, $"{nameof(MemoryCloud)}: Failed to open cloud storage: No servers found."); return(false); } for (int i = 0; i < server_count; i++) { if (cluster_config.RunningMode == RunningMode.Server && (cluster_config.Servers[i].Has(Global.MyIPAddresses, Global.MyIPEndPoint.Port) || cluster_config.Servers[i].HasLoopBackEndpoint(Global.MyIPEndPoint.Port)) ) { StorageTable[i] = Global.LocalStorage; } else { StorageTable[i] = new RemoteStorage(cluster_config.Servers[i].Instances, TrinityConfig.ClientMaxConn, this, i, nonblocking); } } StaticGetPartitionByCellId = this.GetServerIdByCellIdDefault; if (!nonblocking) { int my_server_id = (cluster_config.RunningMode == RunningMode.Server) ? MyPartitionId : -1; var storage = StorageTable.Where((_, idx) => idx != my_server_id).FirstOrDefault() as RemoteStorage; CheckServerProtocolSignatures(storage); } else { ServerConnected += (_, rs_ev) => CheckServerProtocolSignatures(rs_ev.RemoteStorage); } return(true); }
public override Task SaveToStorageAsync(TelemetryReport report) { // Determine PartitionKey var pkVar = report.GetDataPointValue("_telemAzurePartitionKey") as string; if (pkVar != null) { report.DeleteDataPoint("_telemAzurePartitionKey"); } var pk = ((pkVar != null) ? pkVar : StorageSettings.DefaultPartitionKey); #if WINDOWS_APP return(StorageTable.ExecuteAsync(BuildInsertOperation(report, pk)).AsTask()); #else return(StorageTable.ExecuteAsync(BuildInsertOperation(report, pk))); #endif }
public async Task TryCreate_ReturnsTableArgumentBindingExtensionWrapper() { DefaultExtensionRegistry extensions = new DefaultExtensionRegistry(); FooBarTableArgumentBindingExtensionProvider fooBarExtensionProvider = new FooBarTableArgumentBindingExtensionProvider(); extensions.RegisterExtension<ITableArgumentBindingExtensionProvider>(fooBarExtensionProvider); TableArgumentBindingExtensionProvider provider = new TableArgumentBindingExtensionProvider(extensions); ITableArgumentBinding binding = provider.TryCreate(_parameters[0]); Assert.Equal(typeof(TableArgumentBindingExtensionProvider.TableArgumentBindingExtension), binding.GetType()); Assert.Null(BoundTable); CloudTable table = new CloudTable(new Uri("http://localhost:10000/test/table")); IStorageTable storageTable = new StorageTable(table); FunctionBindingContext functionContext = new FunctionBindingContext(Guid.NewGuid(), CancellationToken.None, new StringWriter()); ValueBindingContext context = new ValueBindingContext(functionContext, CancellationToken.None); IValueProvider valueProvider = await binding.BindAsync(storageTable, context); Assert.NotNull(valueProvider); Assert.Same(table, BoundTable); }
public override Task SaveToStorageAsync(List <TelemetryReport> reports) { if (reports.Count < 1) { return(null); } Dictionary <string, TableBatchOperation> partitions = new Dictionary <string, TableBatchOperation>(); List <Task> tasks = new List <Task>(); // Create akk batches foreach (var report in reports) { // Determine PartitionKey var pkVar = report.GetDataPointValue("_telemAzurePartitionKey") as string; if (pkVar != null) { report.DeleteDataPoint("_telemAzurePartitionKey"); } var pk = ((pkVar != null) ? pkVar : StorageSettings.DefaultPartitionKey); if (!partitions.ContainsKey(pk)) { partitions.Add(pk, new TableBatchOperation()); } partitions[pk].Add(BuildInsertOperation(report, pk)); } foreach (var partition in partitions) { tasks.Add(Task.Run(async() => { await StorageTable.ExecuteBatchAsync(partition.Value); })); } return(Task.WhenAll(tasks)); }
public async Task TryCreate_ReturnsTableArgumentBindingExtensionWrapper() { DefaultExtensionRegistry extensions = new DefaultExtensionRegistry(); FooBarTableArgumentBindingProvider fooBarExtensionProvider = new FooBarTableArgumentBindingProvider(); extensions.RegisterExtension <IArgumentBindingProvider <ITableArgumentBinding> >(fooBarExtensionProvider); TableArgumentBindingExtensionProvider provider = new TableArgumentBindingExtensionProvider(extensions); IStorageTableArgumentBinding binding = provider.TryCreate(_parameters[0]); Assert.Equal(typeof(TableArgumentBindingExtensionProvider.TableArgumentBindingExtension), binding.GetType()); Assert.Null(BoundTable); CloudTable table = new CloudTable(new Uri("http://localhost:10000/test/table")); IStorageTable storageTable = new StorageTable(table); FunctionBindingContext functionContext = new FunctionBindingContext(Guid.NewGuid(), CancellationToken.None, new StringWriter()); ValueBindingContext context = new ValueBindingContext(functionContext, CancellationToken.None); IValueProvider valueProvider = await binding.BindAsync(storageTable, context); Assert.NotNull(valueProvider); Assert.Same(table, BoundTable); }