Browse Source

Changes in the protocol:

1. Use absolute time and not relative - prevents accuracy reduction
2. Changed timeouts to 64 bit to prevent year 2038 problem
master
Artyom Beilis 12 years ago
parent
commit
d2a6e09d7a
4 changed files with 12 additions and 15 deletions
  1. +4
    -4
      private/tcp_cache_protocol.h
  2. +2
    -2
      src/session_tcp_storage.cpp
  3. +2
    -4
      src/tcp_cache_client.cpp
  4. +4
    -5
      src/tcp_cache_server.cpp

+ 4
- 4
private/tcp_cache_protocol.h View File

@@ -44,26 +44,26 @@ namespace impl {
uint32_t trigger_len;
} rise;
struct {
int64_t timeout;
uint32_t key_len;
uint32_t data_len;
uint32_t triggers_len;
uint32_t timeout;
} store;
struct {
uint64_t generation;
int64_t timeout;
uint32_t data_len;
uint32_t triggers_len;
uint32_t timeout;
} data;
struct {
uint32_t keys;
uint32_t triggers;
} out_stats;
struct {
uint32_t timeout;
int64_t timeout;
} session_save;
struct {
uint32_t timeout;
int64_t timeout;
} session_data;
} operations;
};


+ 2
- 2
src/session_tcp_storage.cpp View File

@@ -33,7 +33,7 @@ void tcp_storage::save(std::string const &sid,time_t timeout,std::string const &
tcp_operation_header h=tcp_operation_header();
h.opcode=opcodes::session_save;
h.size=in.size() + 32;
h.operations.session_save.timeout=timeout - time(0);
h.operations.session_save.timeout=timeout;
std::string data;
data.reserve(sid.size() + in.size());
data+=sid;
@@ -49,7 +49,7 @@ bool tcp_storage::load(std::string const &sid,time_t &timeout,std::string &out)
std::string data=sid;
tcp().get(sid).transmit(h,data);
if(h.opcode==opcodes::session_load_data) {
timeout = time(NULL) + h.operations.session_data.timeout;
timeout = h.operations.session_data.timeout;
out.swap(data);
return true;
}


+ 2
- 4
src/tcp_cache_client.cpp View File

@@ -67,7 +67,7 @@ int tcp_cache::fetch( std::string const &key,
if(h.opcode!=opcodes::data)
return not_found;

timeout = h.operations.data.timeout + time(0);
timeout = h.operations.data.timeout;
generation=h.operations.data.generation;

@@ -115,9 +115,7 @@ void tcp_cache::store( std::string const &key,
h.operations.store.key_len=key.size();
data.append(a);
h.operations.store.data_len=a.size();
time_t now;
time(&now);
h.operations.store.timeout=timeout-now > 0 ? timeout-now : 0;
h.operations.store.timeout=timeout;
unsigned tlen=0;
for(std::set<std::string>::const_iterator p=triggers.begin(),e=triggers.end();p!=e;++p) {
tlen+=p->size()+1;


+ 4
- 5
src/tcp_cache_server.cpp View File

@@ -122,8 +122,7 @@ public:
hout_.size=data_out_.size();
hout_.operations.data.generation=generation;
time_t now=time(0);
hout_.operations.data.timeout = timeout > now ? timeout - now : 0;
hout_.operations.data.timeout = timeout;
}

void rise()
@@ -184,7 +183,7 @@ public:
hout_.opcode=opcodes::error;
return;
}
time_t timeout=time(0)+(time_t)hin_.operations.store.timeout;
time_t timeout=hin_.operations.store.timeout;
std::string key;
key.assign(data_in_.begin(),data_in_.begin()+hin_.operations.store.key_len);
std::string data;
@@ -200,7 +199,7 @@ public:
hout_.opcode=opcodes::error;
return;
}
time_t timeout=hin_.operations.session_save.timeout + time(NULL);
time_t timeout=hin_.operations.session_save.timeout;
std::string sid(data_in_.begin(),data_in_.begin()+32);
std::string value(data_in_.begin()+32,data_in_.end());
sessions_->save(sid,timeout,value);
@@ -215,7 +214,7 @@ public:
time_t timeout;
int toffset;
std::string sid(data_in_.begin(),data_in_.end());
if(!sessions_->load(sid,timeout,data_out_) || (toffset=(timeout-time(NULL))) < 0) {
if(!sessions_->load(sid,timeout,data_out_) || (toffset=(timeout)) < 0) {
hout_.opcode=opcodes::no_data;
return;
}


Loading…
Cancel
Save