예제 #1
0
        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);
        }
예제 #2
0
        /// <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));
        }
예제 #6
0
        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);
        }