46 Commits

Author SHA1 Message Date
Barbara Miller
4ad3cff415 updates for rethinkdb 2.4.9 2023-05-18 17:16:04 -07:00
Noah Levitt
164a0d48af forget the orm smart updates
I think it was blowing up the size of the model objects, not sure why
exactly, but it was kind of pointless, and complex
2019-05-16 23:52:13 +00:00
Noah Levitt
f26704a206 logging.warning instead of warn to assuage py 3.7 2019-05-16 23:29:55 +00:00
Noah Levitt
71221dbe54 minimize impact of down server
The last approach was not good, timeout of 0.1 seconds was too short. A
bunch of stuff has to happen in the timeout period inside of
rethinkdb.connect(). It doesn't offer a way to set only the socket
timeout. Even a timeout of 0.5 seconds results in a noticeable error
rate.

The new approach is to put a server in the penalty box for 5 minutes
when it errors. While the server is in the penalty box, we don't try to
connect to it, unless all the servers are in the penalty box, in which
case we try the server that errored least recently.
2018-11-02 18:05:18 +00:00
Noah Levitt
8ec2d853b6 connect quickly when a server is down
Another tweak to that end. We have observed that when a rethinkdb server
is offline, an attempt to connect to it takes a second or two to time
out. On the other hand, if the host is up but the port is not open
(rethinkdb is not running or something like that), the connection
failure happens very quickly.

To achieve good performance in case a rethinkdb server is down, we are
now setting a timeout on the connect() call. The timeout starts at
0.1 sec, for quick retry, and backs off up to 10 sec in case of repeated
failures.
2018-11-01 19:17:50 +00:00
Noah Levitt
e188c83063 retry quickly on first connection failure then...
... back off on each subsequent retry
2018-10-29 13:34:45 -07:00
Noah Levitt
edf68edaa2 pass through extra args to run() 2018-09-28 12:27:13 -07:00
Noah Levitt
c5b1b0a620 fail after 20 "recoverable" exception in iterator
it turns out that when iterating over results sometimes (always?) errors
that are recoverable when running a query are not recoverable, so we've
been ending up in infinite loops
2018-09-27 12:56:30 -07:00
Noah Levitt
968513cdb5 handle recoverable errors that happen while
iterating over results!
2018-09-17 12:03:51 -07:00
Noah Levitt
7692992676 fix dumb bug 2018-03-22 16:01:21 -07:00
Noah Levitt
5cbfe18f9e make service registry table name configurable 2017-10-10 11:05:32 -07:00
Noah Levitt
c02c4b7d2c new api parse_rethinkdb_url() 2017-10-09 17:22:26 -07:00
Noah Levitt
3ad24d8a08 bump dev version number after merging pull request 2017-10-03 16:41:10 -07:00
James Kafader
e1b4153712 clean up small items, typos, change command name, clean up tests in re: exit code testing. 2017-10-03 16:13:42 -07:00
James Kafader
df7c0b8e32 added tests for purging stale services and minimal tests for command line tool 2017-10-03 14:38:31 -07:00
James Kafader
a57b4484d3 initial (failing) version of tests file for CLI, changes to CLI to get it minimally working 2017-10-03 13:56:32 -07:00
James Kafader
8f5232ac73 a few more revisions after consultation with noah. 2017-09-26 17:00:17 -07:00
James Kafader
872ef2d93b changed after reviewing merge request 2017-09-26 16:43:37 -07:00
James Kafader
a877fa0fd8 Adds cron garbage collector 2017-09-26 15:51:11 -07:00
Noah Levitt
03e641549e use new index "role" in service registry 2017-09-06 17:25:35 -07:00
Noah Levitt
7cf33a81ea retry in case of another type of recoverable error from a rethinkdb operation 2017-06-27 10:58:30 -07:00
Noah Levitt
b063fdc1fb fix the KeyError bug in unique_service() 2017-05-26 14:52:36 -07:00
Noah Levitt
d33695e40b tweak some docs 2017-05-17 12:28:48 -07:00
Noah Levitt
03e9d4eeef Merge branch 'master' into rename-heartbeat-interval-to-ttl
* master:
  bump version for pull request just merged and tweak run-tests.sh
  avoid database transaction to get current time
  make sure this variable is actually defined
  correct comment
  standardize the concept of 'now' to ensure that the same view of the service is returned from the read and update queries.
2017-05-17 12:15:44 -07:00
Noah Levitt
158923d88b avoid database transaction to get current time 2017-05-17 12:11:26 -07:00
James Kafader
a0d17151fe make sure this variable is actually defined 2017-05-16 18:16:54 -07:00
James Kafader
6dc3967bd6 rename "heartbeat_interval" -> "ttl", simplify mathematics. 2017-05-16 14:31:39 -07:00
James Kafader
55331083b3 correct comment 2017-05-16 11:33:15 -07:00
James Kafader
5fbedb0443 Merge branch 'master' into fixes-no-unique-service-after-nomination 2017-05-16 11:31:54 -07:00
James Kafader
78c26186b0 standardize the concept of 'now' to ensure that the same view of the service is returned from the read and update queries. 2017-05-16 11:31:03 -07:00
Noah Levitt
28b8c2eaac remove accidentally added file __init__.pyc and allow travis-ci failures on non-stable versions of python 2017-05-01 19:56:52 -07:00
Noah Levitt
406a617d01 generalize regex to handle another exception message "Cannot perform read: The primary replica isn't connected to a quorum of replicas. ..." 2017-05-01 15:29:27 -07:00
Noah Levitt
6c57b81de8 recover from a transient error, which happens for me at least rethinkdb starts up 2017-05-01 14:01:01 -07:00
Noah Levitt
9c2e7a59e1 remove stray code from abandoned heartbeat technique in unique_service() 2017-05-01 12:04:26 -07:00
Noah Levitt
b85566c405 rename ServiceRegistry.leader() to ServiceRegistry.unique_service(); implement heartbeat in that method; only return healthy service; add a detailed docstring 2017-04-28 16:29:00 -07:00
Noah Levitt
dcccc3fa23 lots of documentation on the service registry 2017-04-28 15:23:55 -07:00
Noah Levitt
a1c5a08790 raise exception if heartbeat status_info is missing required fields 2017-04-27 14:34:07 -07:00
James Kafader
a5cac606fa added a leader election feature and tests 2017-04-18 16:56:53 -07:00
Noah Levitt
2f01252c32 change logic of orm constructor so that initial values are not considered updates, and explain a bit in the docstring 2017-03-23 18:19:13 -07:00
Noah Levitt
7b17ed1057 turns out we want populate_defaults to happen in __init__, fix so things work right 2017-03-07 17:46:48 -08:00
Noah Levitt
3fd2e5cf60 new method on orm class populate_defaults(), which runs at the beginning of save(), since populating them in __init__() is problematic 2017-03-07 12:44:52 -08:00
Noah Levitt
07bc01cbbd have Document.load() return None if no such doc is found in the db 2017-03-02 10:31:29 -08:00
Noah Levitt
246dfb5b7e new orm class method table_ensure 2017-03-01 11:40:12 -08:00
Noah Levitt
c14bae6050 new convention, call Rethinker object rr (mnemonic RethinkeR, or *double*[think]), leave rethinkdb as r per the rethinkdb convention 2017-03-01 11:20:27 -08:00
Noah Levitt
536bf8d1d8 implement or explicitly disallow other top-level dict operations on ORM Document, and add more automated tests 2017-02-28 17:56:44 -08:00
Noah Levitt
e8db41763b rename the project "doublethink" (credit goes to @adam-miller) 2017-02-28 16:44:26 -08:00