Updating wrapped languages to new time functions

pull/2403/head
Craig Tiller 10 years ago
parent 75cfb044f3
commit 354398f9f5
  1. 2
      src/cpp/util/time.cc
  2. 3
      src/node/ext/completion_queue_async_worker.cc
  3. 3
      src/node/ext/server.cc
  4. 8
      src/node/ext/timeval.cc
  5. 1
      src/python/src/grpc/_adapter/_c/utility.c
  6. 13
      src/ruby/ext/grpc/rb_grpc.c
  7. 5
      test/cpp/end2end/end2end_test.cc
  8. 2
      test/cpp/end2end/thread_stress_test.cc
  9. 9
      test/cpp/util/time_test.cc

@ -59,6 +59,7 @@ void Timepoint2Timespec(const system_clock::time_point& from,
nanoseconds nsecs = duration_cast<nanoseconds>(deadline - secs); nanoseconds nsecs = duration_cast<nanoseconds>(deadline - secs);
to->tv_sec = secs.count(); to->tv_sec = secs.count();
to->tv_nsec = nsecs.count(); to->tv_nsec = nsecs.count();
to->clock_type = GPR_CLOCK_REALTIME;
} }
void TimepointHR2Timespec(const high_resolution_clock::time_point& from, void TimepointHR2Timespec(const high_resolution_clock::time_point& from,
@ -74,6 +75,7 @@ void TimepointHR2Timespec(const high_resolution_clock::time_point& from,
nanoseconds nsecs = duration_cast<nanoseconds>(deadline - secs); nanoseconds nsecs = duration_cast<nanoseconds>(deadline - secs);
to->tv_sec = secs.count(); to->tv_sec = secs.count();
to->tv_nsec = nsecs.count(); to->tv_nsec = nsecs.count();
to->clock_type = GPR_CLOCK_REALTIME;
} }
system_clock::time_point Timespec2Timepoint(gpr_timespec t) { system_clock::time_point Timespec2Timepoint(gpr_timespec t) {

@ -62,7 +62,8 @@ CompletionQueueAsyncWorker::CompletionQueueAsyncWorker()
CompletionQueueAsyncWorker::~CompletionQueueAsyncWorker() {} CompletionQueueAsyncWorker::~CompletionQueueAsyncWorker() {}
void CompletionQueueAsyncWorker::Execute() { void CompletionQueueAsyncWorker::Execute() {
result = grpc_completion_queue_next(queue, gpr_inf_future); result =
grpc_completion_queue_next(queue, gpr_inf_future(GPR_CLOCK_REALTIME));
if (!result.success) { if (!result.success) {
SetErrorMessage("The batch encountered an error"); SetErrorMessage("The batch encountered an error");
} }

@ -161,7 +161,8 @@ void Server::ShutdownServer() {
grpc_server_shutdown_and_notify(this->wrapped_server, grpc_server_shutdown_and_notify(this->wrapped_server,
this->shutdown_queue, this->shutdown_queue,
NULL); NULL);
grpc_completion_queue_pluck(this->shutdown_queue, NULL, gpr_inf_future); grpc_completion_queue_pluck(this->shutdown_queue, NULL,
gpr_inf_future(GPR_CLOCK_REALTIME));
this->wrapped_server = NULL; this->wrapped_server = NULL;
} }
} }

@ -42,18 +42,18 @@ namespace node {
gpr_timespec MillisecondsToTimespec(double millis) { gpr_timespec MillisecondsToTimespec(double millis) {
if (millis == std::numeric_limits<double>::infinity()) { if (millis == std::numeric_limits<double>::infinity()) {
return gpr_inf_future; return gpr_inf_future(GPR_CLOCK_REALTIME);
} else if (millis == -std::numeric_limits<double>::infinity()) { } else if (millis == -std::numeric_limits<double>::infinity()) {
return gpr_inf_past; return gpr_inf_past(GPR_CLOCK_REALTIME);
} else { } else {
return gpr_time_from_micros(static_cast<int64_t>(millis * 1000)); return gpr_time_from_micros(static_cast<int64_t>(millis * 1000));
} }
} }
double TimespecToMilliseconds(gpr_timespec timespec) { double TimespecToMilliseconds(gpr_timespec timespec) {
if (gpr_time_cmp(timespec, gpr_inf_future) == 0) { if (gpr_time_cmp(timespec, gpr_inf_future(GPR_CLOCK_REALTIME)) == 0) {
return std::numeric_limits<double>::infinity(); return std::numeric_limits<double>::infinity();
} else if (gpr_time_cmp(timespec, gpr_inf_past) == 0) { } else if (gpr_time_cmp(timespec, gpr_inf_past(GPR_CLOCK_REALTIME)) == 0) {
return -std::numeric_limits<double>::infinity(); return -std::numeric_limits<double>::infinity();
} else { } else {
return (static_cast<double>(timespec.tv_sec) * 1000 + return (static_cast<double>(timespec.tv_sec) * 1000 +

@ -390,6 +390,7 @@ gpr_timespec pygrpc_cast_double_to_gpr_timespec(double seconds) {
} else { } else {
result.tv_sec = (time_t)seconds; result.tv_sec = (time_t)seconds;
result.tv_nsec = ((seconds - result.tv_sec) * 1e9); result.tv_nsec = ((seconds - result.tv_sec) * 1e9);
result.clock_type = GPR_CLOCK_REALTIME;
} }
return result; return result;
} }

@ -222,24 +222,31 @@ static VALUE grpc_rb_time_val_to_s(VALUE self) {
return rb_funcall(grpc_rb_time_val_to_time(self), id_to_s, 0); return rb_funcall(grpc_rb_time_val_to_time(self), id_to_s, 0);
} }
static gpr_timespec zero_realtime;
static gpr_timespec inf_future_realtime;
static gpr_timespec inf_past_realtime;
/* Adds a module with constants that map to gpr's static timeval structs. */ /* Adds a module with constants that map to gpr's static timeval structs. */
static void Init_grpc_time_consts() { static void Init_grpc_time_consts() {
VALUE grpc_rb_mTimeConsts = VALUE grpc_rb_mTimeConsts =
rb_define_module_under(grpc_rb_mGrpcCore, "TimeConsts"); rb_define_module_under(grpc_rb_mGrpcCore, "TimeConsts");
grpc_rb_cTimeVal = grpc_rb_cTimeVal =
rb_define_class_under(grpc_rb_mGrpcCore, "TimeSpec", rb_cObject); rb_define_class_under(grpc_rb_mGrpcCore, "TimeSpec", rb_cObject);
zero_realtime = gpr_time_0(GPR_CLOCK_REALTIME);
inf_future_realtime = gpr_inf_future(GPR_CLOCK_REALTIME);
inf_past_realtime = gpr_inf_past(GPR_CLOCK_REALTIME);
rb_define_const( rb_define_const(
grpc_rb_mTimeConsts, "ZERO", grpc_rb_mTimeConsts, "ZERO",
TypedData_Wrap_Struct(grpc_rb_cTimeVal, &grpc_rb_timespec_data_type, TypedData_Wrap_Struct(grpc_rb_cTimeVal, &grpc_rb_timespec_data_type,
(void *)&gpr_time_0)); (void *)&zero_realtime));
rb_define_const( rb_define_const(
grpc_rb_mTimeConsts, "INFINITE_FUTURE", grpc_rb_mTimeConsts, "INFINITE_FUTURE",
TypedData_Wrap_Struct(grpc_rb_cTimeVal, &grpc_rb_timespec_data_type, TypedData_Wrap_Struct(grpc_rb_cTimeVal, &grpc_rb_timespec_data_type,
(void *)&gpr_inf_future(GPR_CLOCK_REALTIME))); (void *)&inf_future_realtime));
rb_define_const( rb_define_const(
grpc_rb_mTimeConsts, "INFINITE_PAST", grpc_rb_mTimeConsts, "INFINITE_PAST",
TypedData_Wrap_Struct(grpc_rb_cTimeVal, &grpc_rb_timespec_data_type, TypedData_Wrap_Struct(grpc_rb_cTimeVal, &grpc_rb_timespec_data_type,
(void *)&gpr_inf_past(GPR_CLOCK_REALTIME))); (void *)&inf_past_realtime));
rb_define_method(grpc_rb_cTimeVal, "to_time", grpc_rb_time_val_to_time, 0); rb_define_method(grpc_rb_cTimeVal, "to_time", grpc_rb_time_val_to_time, 0);
rb_define_method(grpc_rb_cTimeVal, "inspect", grpc_rb_time_val_inspect, 0); rb_define_method(grpc_rb_cTimeVal, "inspect", grpc_rb_time_val_inspect, 0);
rb_define_method(grpc_rb_cTimeVal, "to_s", grpc_rb_time_val_to_s, 0); rb_define_method(grpc_rb_cTimeVal, "to_s", grpc_rb_time_val_to_s, 0);

@ -75,7 +75,7 @@ const char* kServerCancelAfterReads = "cancel_after_reads";
void MaybeEchoDeadline(ServerContext* context, const EchoRequest* request, void MaybeEchoDeadline(ServerContext* context, const EchoRequest* request,
EchoResponse* response) { EchoResponse* response) {
if (request->has_param() && request->param().echo_deadline()) { if (request->has_param() && request->param().echo_deadline()) {
gpr_timespec deadline = gpr_inf_future; gpr_timespec deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
if (context->deadline() != system_clock::time_point::max()) { if (context->deadline() != system_clock::time_point::max()) {
Timepoint2Timespec(context->deadline(), &deadline); Timepoint2Timespec(context->deadline(), &deadline);
} }
@ -373,7 +373,8 @@ TEST_F(End2endTest, EchoDeadlineForNoDeadlineRpc) {
Status s = stub_->Echo(&context, request, &response); Status s = stub_->Echo(&context, request, &response);
EXPECT_EQ(response.message(), request.message()); EXPECT_EQ(response.message(), request.message());
EXPECT_TRUE(s.ok()); EXPECT_TRUE(s.ok());
EXPECT_EQ(response.param().request_deadline(), gpr_inf_future.tv_sec); EXPECT_EQ(response.param().request_deadline(),
gpr_inf_future(GPR_CLOCK_REALTIME).tv_sec);
} }
TEST_F(End2endTest, UnimplementedRpc) { TEST_F(End2endTest, UnimplementedRpc) {

@ -71,7 +71,7 @@ namespace {
void MaybeEchoDeadline(ServerContext* context, const EchoRequest* request, void MaybeEchoDeadline(ServerContext* context, const EchoRequest* request,
EchoResponse* response) { EchoResponse* response) {
if (request->has_param() && request->param().echo_deadline()) { if (request->has_param() && request->param().echo_deadline()) {
gpr_timespec deadline = gpr_inf_future; gpr_timespec deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
if (context->deadline() != system_clock::time_point::max()) { if (context->deadline() != system_clock::time_point::max()) {
Timepoint2Timespec(context->deadline(), &deadline); Timepoint2Timespec(context->deadline(), &deadline);
} }

@ -47,6 +47,7 @@ class TimeTest : public ::testing::Test {};
TEST_F(TimeTest, AbsolutePointTest) { TEST_F(TimeTest, AbsolutePointTest) {
long us = 10000000L; long us = 10000000L;
gpr_timespec ts = gpr_time_from_micros(us); gpr_timespec ts = gpr_time_from_micros(us);
ts.clock_type = GPR_CLOCK_REALTIME;
system_clock::time_point tp{microseconds(us)}; system_clock::time_point tp{microseconds(us)};
system_clock::time_point tp_converted = Timespec2Timepoint(ts); system_clock::time_point tp_converted = Timespec2Timepoint(ts);
gpr_timespec ts_converted; gpr_timespec ts_converted;
@ -61,15 +62,17 @@ TEST_F(TimeTest, AbsolutePointTest) {
// gpr_inf_future is treated specially and mapped to/from time_point::max() // gpr_inf_future is treated specially and mapped to/from time_point::max()
TEST_F(TimeTest, InfFuture) { TEST_F(TimeTest, InfFuture) {
EXPECT_EQ(system_clock::time_point::max(), EXPECT_EQ(system_clock::time_point::max(),
Timespec2Timepoint(gpr_inf_future)); Timespec2Timepoint(gpr_inf_future(GPR_CLOCK_REALTIME)));
gpr_timespec from_time_point_max; gpr_timespec from_time_point_max;
Timepoint2Timespec(system_clock::time_point::max(), &from_time_point_max); Timepoint2Timespec(system_clock::time_point::max(), &from_time_point_max);
EXPECT_EQ(0, gpr_time_cmp(gpr_inf_future, from_time_point_max)); EXPECT_EQ(
0, gpr_time_cmp(gpr_inf_future(GPR_CLOCK_REALTIME), from_time_point_max));
// This will cause an overflow // This will cause an overflow
Timepoint2Timespec( Timepoint2Timespec(
std::chrono::time_point<system_clock, std::chrono::seconds>::max(), std::chrono::time_point<system_clock, std::chrono::seconds>::max(),
&from_time_point_max); &from_time_point_max);
EXPECT_EQ(0, gpr_time_cmp(gpr_inf_future, from_time_point_max)); EXPECT_EQ(
0, gpr_time_cmp(gpr_inf_future(GPR_CLOCK_REALTIME), from_time_point_max));
} }
} // namespace } // namespace

Loading…
Cancel
Save