예제 #1
0
        internal TransactionOptions ToTransactionOptions()
        {
            var innerOptions = new TransactionOptions.Types.ReadOnly();

            switch (Mode)
            {
            case TimestampBoundMode.Strong:
                innerOptions.Strong = true;
                break;

            case TimestampBoundMode.ReadTimestamp:
                innerOptions.ReadTimestamp = wkt::Timestamp.FromDateTime(Timestamp);
                break;

            case TimestampBoundMode.MinReadTimestamp:
                innerOptions.MinReadTimestamp = wkt::Timestamp.FromDateTime(Timestamp);
                break;

            case TimestampBoundMode.ExactStaleness:
                innerOptions.ExactStaleness = Duration.FromTimeSpan(Staleness);
                break;

            case TimestampBoundMode.MaxStaleness:
                innerOptions.MaxStaleness = Duration.FromTimeSpan(Staleness);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            return(new TransactionOptions {
                ReadOnly = innerOptions
            });
        }
        /*
         * Probe to test PartitionQuery and PartitionRead grpc call from Spanner stub.
         *
         * Args:
         *  stub: An object of SpannerStub.
         *  metrics: A list of metrics.
         */

        public static void partition(Spanner.SpannerClient client, ref Dictionary <string, long> metrics)
        {
            long latency;

            //Start Session
            Session session = StartSession(client);

            TransactionOptions txn_options = new TransactionOptions();

            TransactionOptions.Types.ReadOnly ro = new TransactionOptions.Types.ReadOnly();
            txn_options.ReadOnly = ro;
            TransactionSelector txn_selector = new TransactionSelector();

            txn_selector.Begin = txn_options;

            //Probing PartitionQuery call
            PartitionQueryRequest ptn_query_request = new PartitionQueryRequest();

            ptn_query_request.Session     = session.Name;
            ptn_query_request.Sql         = "select * FROM users";
            ptn_query_request.Transaction = txn_selector;

            stopwatch.Start();
            client.PartitionQuery(ptn_query_request);
            stopwatch.Stop();
            latency = stopwatch.ElapsedMilliseconds;
            metrics.Add("partition_query_latency_ms", latency);

            //Probing PartitionRead Call
            PartitionReadRequest ptn_read_request = new PartitionReadRequest();

            ptn_read_request.Session     = session.Name;
            ptn_read_request.Table       = "users";
            ptn_read_request.Transaction = txn_selector;
            KeySet keyset = new KeySet();

            keyset.All = true;
            ptn_read_request.KeySet = keyset;
            stopwatch.Start();
            client.PartitionRead(ptn_read_request);
            stopwatch.Stop();
            latency = stopwatch.ElapsedMilliseconds;
            metrics.Add("partition_read_latency_ms", latency);

            //Delete Session
            EndSession(client, session);
        }