public async Task SimpleSQLStore_Delete()
        {
            Guid id = Guid.NewGuid();

            if (!GrainClient.IsInitialized)
            {
                GrainClient.Initialize(HostedCluster.ClientConfiguration);
            }

            ISimpleSQLStorageTestGrain grain = GrainClient.GrainFactory.GetGrain <ISimpleSQLStorageTestGrain>(id);

            await grain.DoWrite(1);

            await grain.DoDelete();

            int val = await grain.GetValue(); // Should this throw instead?

            Assert.Equal(0, val);             // "Value after Delete");

            await grain.DoWrite(2);

            val = await grain.GetValue();

            Assert.Equal(2, val); // "Value after Delete + New Write");
        }
Пример #2
0
        public void ClientInit_ErrorDuringInitialize()
        {
            ClientConfiguration cfg = TestClusterOptions.BuildClientConfiguration(HostedCluster.ClusterConfiguration);

            cfg.TraceFileName = "TestOnlyThrowExceptionDuringInit.log";

            // First initialize will have been done by orleans unit test base class, so uninitialize back to null state
            GrainClient.Uninitialize();
            Assert.IsFalse(GrainClient.IsInitialized, "GrainClient.IsInitialized");
            Assert.IsFalse(LogManager.IsInitialized, "Logger.IsInitialized");

            try
            {
                OutsideRuntimeClient.TestOnlyThrowExceptionDuringInit = true;
                Xunit.Assert.Throws <InvalidOperationException>(() =>
                                                                GrainClient.Initialize(cfg));

                Assert.IsFalse(GrainClient.IsInitialized, "GrainClient.IsInitialized");
                Assert.IsFalse(LogManager.IsInitialized, "Logger.IsInitialized");

                OutsideRuntimeClient.TestOnlyThrowExceptionDuringInit = false;

                GrainClient.Initialize(cfg);
                Assert.IsTrue(GrainClient.IsInitialized, "GrainClient.IsInitialized");
                Assert.IsTrue(LogManager.IsInitialized, "Logger.IsInitialized");
            }
            finally
            {
                OutsideRuntimeClient.TestOnlyThrowExceptionDuringInit = false;
            }
        }
Пример #3
0
        public void ClientInit_ErrorDuringInitialize()
        {
            ClientConfiguration cfg = this.fixture.ClientConfiguration;

            // First initialize will have been done by orleans unit test base class, so uninitialize back to null state
            GrainClient.Uninitialize();
            GrainClient.ConfigureLoggingDelegate = builder => builder.AddFile("TestOnlyThrowExceptionDuringInit.log");
            Assert.False(GrainClient.IsInitialized, "GrainClient.IsInitialized");

            try
            {
                OutsideRuntimeClient.TestOnlyThrowExceptionDuringInit = true;
                Assert.Throws <InvalidOperationException>(() =>
                                                          GrainClient.Initialize(cfg));

                Assert.False(GrainClient.IsInitialized, "GrainClient.IsInitialized");

                OutsideRuntimeClient.TestOnlyThrowExceptionDuringInit = false;

                GrainClient.Initialize(cfg);
                Assert.True(GrainClient.IsInitialized, "GrainClient.IsInitialized");
            }
            finally
            {
                OutsideRuntimeClient.TestOnlyThrowExceptionDuringInit = false;
            }
        }
        public async Task TestGrains()
        {
            var rnd    = new Random();
            var rndId1 = rnd.Next();
            var rndId2 = rnd.Next();

            if (!GrainClient.IsInitialized)
            {
                GrainClient.Initialize(HostedCluster.ClientConfiguration);
            }

            // insert your grain test code here
            var grain = this.HostedCluster.GrainFactory.GetGrain <IMyGrain>(rndId1);

            var thing4 = new DateTime();
            var thing3 = Guid.NewGuid();
            var thing1 = 1;
            var thing2 = "ggggggggggggggggg";
            var things = new List <int> {
                5, 6, 7, 8, 9
            };

            await grain.SaveSomething(thing1, thing2, thing3, thing4, things);

            Assert.Equal(thing1, await grain.GetThing1());
            Assert.Equal(thing2, await grain.GetThing2());
            Assert.Equal(thing3, await grain.GetThing3());
            Assert.Equal(thing4, await grain.GetThing4());
            var res = await grain.GetThings1();

            Assert.Equal(things, res.ToList());
        }
Пример #5
0
        static void RunOrleans()
        {
            var config = ClientConfiguration.LocalhostSilo(26224);

            try
            {
                GrainClient.Initialize(config);
                Console.WriteLine("Client successfully connect to silo host");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Orleans client initialization failed failed due to {ex}");

                Console.ReadLine();
                return;
            }

            var friend = GrainClient.GrainFactory.GetGrain <IHello>(0);
            var name   = "world";

            CodeTimerAdvance.TimeByConsole("orleans", _count, (i) =>
            {
                var response = friend.SayHello(new RpcTest_OrleansServer.Interfaces.HelloRequest
                {
                    Name = name
                }).Result;
            }, _threadcount);

            Console.WriteLine("Press Enter to terminate...");
            Console.ReadLine();
        }
Пример #6
0
            public ClientWrapperBase(string name, int gatewayport, string clusterId, Action <ClientConfiguration> clientconfig_customizer)
            {
                this.Name = name;

                Console.WriteLine("Initializing client {0} in AppDomain {1}", name, AppDomain.CurrentDomain.FriendlyName);

                ClientConfiguration config = null;

                try
                {
                    config = clientconfiguration.Value;
                }
                catch (Exception) { }

                if (config == null)
                {
                    Assert.True(false, "Error loading client configuration file");
                }
                config.GatewayProvider = ClientConfiguration.GatewayProviderType.Config;
                config.Gateways.Clear();
                config.Gateways.Add(new IPEndPoint(IPAddress.Loopback, gatewayport));

                clientconfig_customizer?.Invoke(config);

                GrainClient.Initialize(config);
            }
Пример #7
0
        private static void test(int id, string msg = null)
        {
            // Then configure and connect a client.
            //var clientConfig = ClientConfiguration.LoadFromFile("ClientConfiguration.xml");
            var clientConfig = ClientConfiguration.LocalhostSilo();

            IClusterClient client = new ClientBuilder()
                                    .UseConfiguration(clientConfig).Build();

            client.Connect().Wait();

            Console.WriteLine("Client connected.");

            if (string.IsNullOrEmpty(msg))
            {
                Console.WriteLine("Write some msg.");
                msg = Console.ReadLine();
            }

            GrainClient.Initialize(clientConfig);
            var friend = GrainClient.GrainFactory.GetGrain <IHello>(id);
            var result = friend.SayHello(msg).Result;

            Console.WriteLine(result);

            Chat c   = new Chat();
            var  obj = GrainClient.GrainFactory.CreateObjectReference <IChat>(c).Result;

            friend.Subscribe(obj);

            friend.SendUpdateMessage("456");

            client.Close();
        }
Пример #8
0
        private static void InitializeImpl_FromConfig(ClientConfiguration config)
        {
            if (GrainClient.IsInitialized)
            {
                Trace.TraceInformation("Connection to Orleans gateway silo already initialized.");
                return;
            }

            //// Find endpoint info for the gateway to this Orleans silo cluster
            //Trace.WriteLine("Searching for Orleans gateway silo via Orleans instance table...");
            var deploymentId     = config.DeploymentId;
            var connectionString = config.DataConnectionString;

            if (String.IsNullOrEmpty(deploymentId))
            {
                throw new ArgumentException("Cannot connect to Azure silos with null deploymentId", "config.DeploymentId");
            }

            if (String.IsNullOrEmpty(connectionString))
            {
                throw new ArgumentException("Cannot connect to Azure silos with null connectionString", "config.DataConnectionString");
            }

            bool      initSucceeded = false;
            Exception lastException = null;

            for (int i = 0; i < MaxRetries; i++)
            {
                try
                {
                    //parse through ConfigureLoggingDelegate to GrainClient
                    GrainClient.ConfigureLoggingDelegate = ConfigureLoggingDelegate;
                    // Initialize will throw if cannot find Gateways
                    GrainClient.Initialize(config);
                    initSucceeded = true;
                    break;
                }
                catch (Exception exc)
                {
                    lastException = exc;
                    Trace.TraceError("Client.Initialize failed with exc -- {0}. Will try again", exc.Message);
                }
                // Pause to let Primary silo start up and register
                Trace.TraceInformation("Pausing {0} awaiting silo and gateways registration for Deployment={1}", StartupRetryPause, deploymentId);
                Thread.Sleep(StartupRetryPause);
            }

            if (initSucceeded)
            {
                return;
            }

            OrleansException err;

            err = lastException != null ? new OrleansException(String.Format("Could not Initialize Client for DeploymentId={0}. Last exception={1}",
                                                                             deploymentId, lastException.Message), lastException) : new OrleansException(String.Format("Could not Initialize Client for DeploymentId={0}.", deploymentId));
            Trace.TraceError("Error starting Orleans Azure client application -- {0} -- bailing. {1}", err.Message, LogFormatter.PrintException(err));
            throw err;
        }
Пример #9
0
        static void Main(string[] args)
        {
            GrainClient.Initialize("ClientConfiguration.xml");


            var grain = GrainClient.GrainFactory.GetGrain <IGoodsInfoGrain>("suiji");

            var goodsList = grain.GetAllGoods().Result;

            Console.WriteLine("按任意键开始购买:");
            Console.ReadKey();
            if (goodsList != null && goodsList.Count > 0)
            {
                Task tsk1 = new Task(() =>
                {
                    //Random rd = new Random(10);
                    for (int i = 0; i < 1000; i++)
                    {
                        foreach (var item in goodsList)
                        {
                            BuyGoods(item, 1, "张三");
                        }
                    }
                    Console.WriteLine("李四购买结束");
                });

                Task tsk2 = new Task(() =>
                {
                    //Random rd = new Random(10);
                    for (int i = 0; i < 1000; i++)
                    {
                        foreach (var item in goodsList)
                        {
                            BuyGoods(item, 1, "李四");
                        }
                    }
                    Console.WriteLine("李四购买结束");
                });

                Task tsk3 = new Task(() =>
                {
                    Random rd = new Random(10);
                    for (int i = 0; i < 1000; i++)
                    {
                        foreach (var item in goodsList)
                        {
                            BuyGoods(item, rd.Next(1, 10), "王二");
                        }
                    }

                    Console.WriteLine("王二购买结束");
                });
                tsk1.Start();
                tsk2.Start();
                tsk3.Start();
            }
            Console.ReadLine();
            Console.Write(strBuild);
        }
Пример #10
0
        public void ClientInit_UnThenReinitialize()
        {
            GrainClient.Uninitialize();
            Assert.IsFalse(GrainClient.IsInitialized);

            GrainClient.Initialize(HostedCluster.ClientConfiguration);
            Assert.IsTrue(GrainClient.IsInitialized);
        }
Пример #11
0
 public ClientInitTests(ITestOutputHelper output)
 {
     this.output = output;
     if (!GrainClient.IsInitialized)
     {
         GrainClient.Initialize("ClientConfigurationForTesting.xml");
     }
 }
Пример #12
0
        public void ClientInit_InitializeWithDelegate()
        {
            var wasCalled = false;

            GrainClient.ConfigureClientDelegate = clientBuilder => wasCalled = true;
            GrainClient.Initialize(this.fixture.ClientConfiguration);
            Assert.True(wasCalled);
        }
Пример #13
0
        protected void Application_Start()
        {
            var path = Path.Combine(HostingEnvironment.ApplicationPhysicalPath, "ClientConfiguration.xml");

            GlobalConfiguration.Configure(WebApiConfig.Register);
            GrainClient.Initialize(path);
            MonitorsBootstrap.Register();
        }
Пример #14
0
        static void Main(string[] args)
        {
            GrainClient.Initialize("DevTestClientConfiguration.xml");

            Run().Wait();

            Console.Read();
        }
Пример #15
0
        public void ClientInit_UnThenReinitialize()
        {
            GrainClient.Uninitialize();
            Assert.False(GrainClient.IsInitialized);

            GrainClient.Initialize(fixture.ClientConfiguration);
            Assert.True(GrainClient.IsInitialized);
        }
Пример #16
0
 public async Task Start(CancellationToken cancellationToken)
 {
     Console.WriteLine("Initializing Grain Client...");
     GrainClient.Initialize("OrleansClientConfig.xml");
     _listener.HandleClient += Listener_HandleClient;
     Console.WriteLine("Listening on {0}...", _endPoint);
     await _listener.StartListen(_endPoint, cancellationToken);
 }
Пример #17
0
 public ClientInitTests(Fixture fixture)
 {
     this.fixture = fixture;
     if (!GrainClient.IsInitialized)
     {
         GrainClient.Initialize(fixture.ClientConfiguration);
     }
 }
Пример #18
0
        public void ClientInit_UnThenReinitialize()
        {
            GrainClient.Uninitialize();
            Assert.IsFalse(GrainClient.IsInitialized);

            GrainClient.Initialize("ClientConfigurationForTesting.xml");
            Assert.IsTrue(GrainClient.IsInitialized);
        }
 public void Initialize()
 {
     if (GrainClient.IsInitialized)
     {
         return;
     }
     GrainClient.Initialize(_configuration);
 }
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);

            var config = Orleans.Runtime.Configuration.ClientConfiguration.LocalhostSilo();

            GrainClient.Initialize(config);
        }
Пример #21
0
 public ClientInitTests(DefaultClusterFixture fixture)
 {
     this.HostedCluster = fixture.HostedCluster;
     if (!GrainClient.IsInitialized)
     {
         GrainClient.Initialize(fixture.HostedCluster.ClientConfiguration);
     }
 }
        static async Task DoClientWork()
        {
            // basic configuration
            var clientconfig = new Orleans.Runtime.Configuration.ClientConfiguration();

            clientconfig.Gateways.Add(new IPEndPoint(IPAddress.Loopback, 30000));

            GrainClient.Initialize(clientconfig);

            var idE1 = "5ad92744-a0b1-487b-a9e7-e6b91e9a9826";
            var idE2 = "2eef0ac5-540f-4421-b9a9-79d89400f7ab";
            var e1   = GrainClient.GrainFactory.GetGrain <IEmployee>(Guid.Parse(idE1));
            var e2   = GrainClient.GrainFactory.GetGrain <IEmployee>(Guid.Parse(idE2));

            Console.WriteLine("Current State:");
            await e1.Print();

            await e2.Print();

            if (!await e1.SpendCurrency(10))
            {
                Console.WriteLine("Employee {0} does not have 10 currency to spend", idE1);
            }

            if (!await e2.SpendCurrency(10))
            {
                Console.WriteLine("Employee {0} does not have 10 currency to spend", idE2);
            }

            await e1.AddCurrency(20);

            await e2.AddGoods(10);

            await e1.Print();

            await e2.Print();

            var transaction = new TransactionHelper <EmployeeStateTransfer>();

            transaction.Add(e1, new EmployeeStateTransfer()
            {
                Currency = -5, Goods = 5
            });
            transaction.Add(e2, new EmployeeStateTransfer()
            {
                Currency = 5, Goods = -5
            });
            Console.WriteLine("Executing transaction to trade 5 currency for 5 goods... ");
            await transaction.Execute();

            Console.WriteLine("Transaction complete.");

            await e1.Print();

            await e2.Print();

            Console.WriteLine("Done!");
        }
Пример #23
0
        //---------------------------------------------------------------------
        public OrleansClientWrapper(string name, string orleansConfigFile)
        {
            this.Name      = name;
            this.AppDomain = AppDomain.CurrentDomain;

            Console.WriteLine("Initializing OrleansClientWrapperBase in AppDomain {0}", this.AppDomain.FriendlyName);

            GrainClient.Initialize(orleansConfigFile);
        }
        /// <summary>
        /// Initializes the silo client.
        /// </summary>
        /// <param name="serviceName">
        /// The Windows Fabric service name.
        /// </param>
        /// <param name="config">
        /// The configuration, or <see langword="null"/> to load from the current directory.
        /// </param>
        public static void Initialize(ClientConfiguration config = null)
        {
            if (config == null)
            {
                config = ClientConfiguration.StandardLoad();
            }

            GrainClient.Initialize(config);
        }
        public static void GrainTestsClassInitialize(TestContext testContext)
        {
            hostDomain = AppDomain.CreateDomain("OrleansHost", null, new AppDomainSetup {
                AppDomainInitializer = InitSilo,
                ApplicationBase      = AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
            });

            GrainClient.Initialize("DevTestClientConfiguration.xml");
        }
Пример #26
0
        static async Task Start(string[] args)
        {
            try
            {
                //var SyncContext = new SynchronizationContext();
                //SynchronizationContext.SetSynchronizationContext(SyncContext);

                // The Orleans silo environment is initialized in its own app domain in order to more
                // closely emulate the distributed situation, when the client and the server cannot
                // pass data via shared memory.
                var hostDomain = AppDomain.CreateDomain("OrleansHost", null, new AppDomainSetup
                {
                    AppDomainInitializer          = InitSilo,
                    AppDomainInitializerArguments = args,
                });

                var config = ClientConfiguration.LocalhostSilo();
                config.AddSimpleMessageStreamProvider("SimpleStreamProvider");
                GrainClient.Initialize(config);

                // TODO: once the previous call returns, the silo is up and running.
                //       This is the place your custom logic, for example calling client logic
                //       or initializing an HTTP front end for accepting incoming requests.

                // configure and start the reporting of silo metrics
                // UNCOMMENT BELOW to override configuration defaults
                var metrics = GrainClient.GrainFactory.GetGrain <IClusterMetricsGrain>(Guid.Empty);
                await metrics.Configure(new MetricsConfiguration
                {
                    Enabled                  = true,                     // default
                    SamplingInterval         = TimeSpan.FromSeconds(1),  // default
                    ConfigurationInterval    = TimeSpan.FromSeconds(10), // default
                    StaleSiloMetricsDuration = TimeSpan.FromSeconds(10), // default
                    LogExceptions            = true,
                    TrackExceptionCounters   = true,
                    TrackMethodGrainCalls    = true,
                    StreamingProviderName    = "SimpleStreamProvider",
                    HistoryLength            = 30 // default
                });

                // TODO: put together a better demo
                // start our silly demo simulation
                var sim = GrainClient.GrainFactory.GetGrain <ISimulatorGrain>(Guid.Empty);
                await sim.StartSimulation(TimeSpan.FromMinutes(10), 200, 200, true);

                await SubscribeToStream();

                Console.WriteLine("Orleans Silo is running.\nPress Enter to terminate...");
                Console.ReadLine();

                hostDomain.DoCallBack(ShutdownSilo);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
Пример #27
0
        protected void Application_Start()
        {
            GrainClient.Initialize(Server.MapPath("ClientConfiguration.xml"));

            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
Пример #28
0
        static void Main(string[] args)
        {
            // The Orleans silo environment is initialized in its own app domain in order to more
            // closely emulate the distributed situation, when the client and the server cannot
            // pass data via shared memory.
            AppDomain hostDomain = AppDomain.CreateDomain("OrleansHost", null, new AppDomainSetup
            {
                AppDomainInitializer          = InitSilo,
                AppDomainInitializerArguments = args,
            });

            GrainClient.Initialize(); // default OrleansClientConfiguration.xml

            // TODO: once the previous call returns, the silo is up and running.
            //       This is the place your custom logic, for example calling client logic
            //       or initializing an HTTP front end for accepting incoming requests.

            Console.WriteLine("Orleans Silo is running.\nEnter exit to terminate...");

            Console.ReadLine();
            const string systemGrainName1 = "vehicle1";
            const string systemGrainName2 = "vehicle2";

            foreach (var deviceGrainId in Enumerable.Range(1, 11))
            {
                GrainClient.GrainFactory.GetGrain <IDeviceGrain>(deviceGrainId)
                .JoinSystem(deviceGrainId > 5 ? systemGrainName2 : systemGrainName1)
                .Wait();
            }

            var observer = GrainClient.GrainFactory.CreateObjectReference <ISystemObserver>(new SystemObserver()).Result;

            GrainClient.GrainFactory.GetGrain <ISystemGrain>(systemGrainName1).Subscribe(observer);
            GrainClient.GrainFactory.GetGrain <ISystemGrain>(systemGrainName2).Subscribe(observer);

            var    grain = GrainClient.GrainFactory.GetGrain <IDecodeGrain>(1);
            string line  = null;

            while (line != "exit")
            {
                line = Console.ReadLine();
                var parts = line.Split(',');
                if (parts.Length == 2 && int.TryParse(parts[0], out int res) && double.TryParse(parts[1], out double temperature))
                {
                    grain.Decode(line);
                }
                else if (line == "exit")
                {
                    hostDomain.DoCallBack(ShutdownSilo);
                }
                else
                {
                    Console.WriteLine("Not supported command");
                }
            }
        }
Пример #29
0
        public void ClientInit_MultiInitialize()
        {
            // First initialize will have been done by orleans unit test base class

            GrainClient.Initialize(this.fixture.ClientConfiguration);
            Assert.True(GrainClient.IsInitialized);

            GrainClient.Initialize(this.fixture.ClientConfiguration);
            Assert.True(GrainClient.IsInitialized);
        }
Пример #30
0
        public void ClientInit_MultiInitialize()
        {
            // First initialize will have been done by orleans unit test base class

            GrainClient.Initialize("ClientConfigurationForTesting.xml");
            Assert.IsTrue(GrainClient.IsInitialized);

            GrainClient.Initialize("ClientConfigurationForTesting.xml");
            Assert.IsTrue(GrainClient.IsInitialized);
        }