activerecord-cockroachdb-adapter 7.0.0 → 7.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/docker.yml +57 -0
- data/.gitignore +7 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +4 -0
- data/CONTRIBUTING.md +33 -16
- data/Gemfile +1 -1
- data/build/Dockerfile +2 -5
- data/build/local-test.sh +0 -6
- data/build/teamcity-test.sh +14 -11
- data/docker.sh +1 -1
- data/lib/active_record/connection_adapters/cockroachdb/transaction_manager.rb +27 -4
- data/lib/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 829d7c6d923f6d2949dfcca1c946be01286b79f643987696b0d271c696e3c55d
|
4
|
+
data.tar.gz: 558689db88c43aaa1fe4d10216796ee2754d9b206cc56feb846b0ca2e05e745c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b3ad08b9912080c5f324ef1b244e5f9d1ed22cd1e63f3c9ee9623399e5c92e12000681b0988e533a19e4e403325a13a419e534499c2d3fd6316b36525be57d9
|
7
|
+
data.tar.gz: c77f0016087842bdcfd7d8cbb0989b687653dcc4e6ce3e5c618b2fe2f1a44e1c995b84836235ba497f7623713987180796c1d07ae639f16dd4be6af747c1e9a4
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# This workflow is based off of the example at
|
2
|
+
# https://github.com/docker/metadata-action
|
3
|
+
#
|
4
|
+
# Multi-platform configuration from
|
5
|
+
# https://github.com/docker/build-push-action/blob/master/docs/advanced/multi-platform.md
|
6
|
+
#
|
7
|
+
# Caching from
|
8
|
+
# https://github.com/docker/build-push-action/blob/master/docs/advanced/cache.md
|
9
|
+
name: Docker
|
10
|
+
permissions:
|
11
|
+
contents: read
|
12
|
+
on:
|
13
|
+
push:
|
14
|
+
branches: [ master ]
|
15
|
+
paths:
|
16
|
+
- 'build/Dockerfile'
|
17
|
+
# Only build, but don't push, on a PR if it touches the Dockerfile,
|
18
|
+
# since this takes a while to execute.
|
19
|
+
pull_request:
|
20
|
+
paths:
|
21
|
+
- 'build/Dockerfile'
|
22
|
+
jobs:
|
23
|
+
docker:
|
24
|
+
runs-on: ubuntu-latest
|
25
|
+
steps:
|
26
|
+
- name: Checkout
|
27
|
+
uses: actions/checkout@v3
|
28
|
+
- name: Set up QEMU
|
29
|
+
uses: docker/setup-qemu-action@v2
|
30
|
+
- name: Set up Docker Buildx
|
31
|
+
uses: docker/setup-buildx-action@v2
|
32
|
+
- name: Docker meta
|
33
|
+
id: meta
|
34
|
+
uses: docker/metadata-action@v4
|
35
|
+
with:
|
36
|
+
images: cockroachdb/activerecord_test_container
|
37
|
+
labels: |
|
38
|
+
org.opencontainers.image.title=Active Record CockroachDB Adapter Test Image
|
39
|
+
org.opencontainers.image.vendor=Cockroach Labs Inc.
|
40
|
+
org.opencontainers.image.description=Environment for running tests
|
41
|
+
- name: Login to DockerHub
|
42
|
+
if: github.event_name != 'pull_request'
|
43
|
+
uses: docker/login-action@v2
|
44
|
+
with:
|
45
|
+
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
46
|
+
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
47
|
+
- name: Build and push
|
48
|
+
uses: docker/build-push-action@v4
|
49
|
+
with:
|
50
|
+
context: .
|
51
|
+
file: build/Dockerfile
|
52
|
+
platforms: linux/amd64,linux/arm64
|
53
|
+
push: ${{ github.event_name != 'pull_request' }}
|
54
|
+
tags: ${{ steps.meta.outputs.tags }}
|
55
|
+
labels: ${{ steps.meta.outputs.labels }}
|
56
|
+
cache-from: type=gha
|
57
|
+
cache-to: type=gha,mode=max
|
data/.gitignore
CHANGED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
3.2.1
|
data/CHANGELOG.md
CHANGED
data/CONTRIBUTING.md
CHANGED
@@ -25,22 +25,39 @@ CREATE DATABASE activerecord_unittest2;
|
|
25
25
|
```
|
26
26
|
|
27
27
|
It is best to have a Ruby environment manager installed, such as
|
28
|
-
[
|
29
|
-
If you are using
|
30
|
-
|
28
|
+
[rbenv](https://github.com/rbenv/rbenv), as Rails has varying Ruby version
|
29
|
+
requirements. If you are using rbenv, you then install and use the required
|
30
|
+
Ruby version.
|
31
31
|
|
32
32
|
(Alternatively, one can use `./docker.sh build/teamcity-test.sh` to run
|
33
|
-
tests
|
33
|
+
tests similarly to TeamCity. The database is destroyed between each
|
34
34
|
test file.)
|
35
35
|
|
36
|
+
Install rbenv with ruby-build on MacOS:
|
36
37
|
|
37
38
|
```bash
|
38
|
-
|
39
|
-
|
40
|
-
rvm use 2.2.5
|
39
|
+
brew install rbenv ruby-build
|
40
|
+
echo 'eval "$(rbenv init - zsh)"' >> ~/.profile
|
41
41
|
```
|
42
42
|
|
43
|
-
|
43
|
+
Install rbenv with ruby-build on Ubuntu:
|
44
|
+
|
45
|
+
```bash
|
46
|
+
sudo apt-get install rbenv
|
47
|
+
echo 'eval "$(rbenv init - zsh)"' >> ~/.profile
|
48
|
+
|
49
|
+
git clone https://github.com/sstephenson/ruby-build.git ~/ruby-build
|
50
|
+
sh ~/ruby-build/install.sh
|
51
|
+
```
|
52
|
+
|
53
|
+
Use rbenv to install version of Ruby specified by `.ruby-version`.
|
54
|
+
|
55
|
+
```bash
|
56
|
+
rbenv install
|
57
|
+
rbenv rehash
|
58
|
+
```
|
59
|
+
|
60
|
+
Using [bundler](http://bundler.io/), install the dependencies of Rails.
|
44
61
|
|
45
62
|
```bash
|
46
63
|
bundle install
|
@@ -52,13 +69,13 @@ Then, to run the full test suite with an active CockroachDB instance:
|
|
52
69
|
bundle exec rake test
|
53
70
|
```
|
54
71
|
|
55
|
-
To run specific ActiveRecord tests, set
|
72
|
+
To run specific ActiveRecord tests, set environment variable `TEST_FILES_AR`. For example, to run ActiveRecord tests `test/cases/associations_test.rb` and `test/cases/ar_schema_test.rb.rb`
|
56
73
|
|
57
74
|
```bash
|
58
75
|
TEST_FILES_AR="test/cases/associations_test.rb,test/cases/ar_schema_test.rb" bundle exec rake test
|
59
76
|
```
|
60
77
|
|
61
|
-
To run specific CockroachDB Adapter tests, set
|
78
|
+
To run specific CockroachDB Adapter tests, set environment variable `TEST_FILES`. For example, to run CockroachDB Adpater tests `test/cases/adapter_test.rb` and `test/cases/associations/left_outer_join_association_test.rb`
|
62
79
|
|
63
80
|
```bash
|
64
81
|
TEST_FILES="test/cases/adapter_test.rb,test/cases/associations/left_outer_join_association_test.rb" bundle exec rake test
|
@@ -104,7 +121,7 @@ And the `activerecord_unittest` database will use the `RESTORE` command to load
|
|
104
121
|
## Support past Rails versions
|
105
122
|
|
106
123
|
Currently, only a beta version of Rails is tested. This means that the
|
107
|
-
adapter has been modified in to
|
124
|
+
adapter has been modified in to accommodate unreleased changes. In order
|
108
125
|
to run the tests for Rails 5.1 or 4.2, the test changes will need to be
|
109
126
|
cherry-picked back. Conflicts are mostly only expected for tests that
|
110
127
|
have not yet been added.
|
@@ -129,7 +146,7 @@ against different versions of CockroachDB.
|
|
129
146
|
|
130
147
|
As CockroachDB improves, so do the features that can be supported in
|
131
148
|
ActiveRecord. Many of them are gated by conditions the
|
132
|
-
CockroachDBAdapter has
|
149
|
+
CockroachDBAdapter has overridden. As these features are completed, these
|
133
150
|
gates should be toggled. Something that would help this process would be
|
134
151
|
linking those issues back to this adapter so that part of the feature
|
135
152
|
completing includes updating the adapter.
|
@@ -231,10 +248,10 @@ need to be cleaned up.
|
|
231
248
|
# Notes for the non-Rubyer
|
232
249
|
|
233
250
|
rvm is an environment manager that lets you manage and swap between
|
234
|
-
multiple
|
251
|
+
multiple versions of Ruby and their dependencies.
|
235
252
|
|
236
|
-
bundle is
|
237
|
-
`<project>.gemspec`) to manage and load
|
253
|
+
bundle is dependency manager that uses a projects `Gemfile` (and often
|
254
|
+
`<project>.gemspec`) to manage and load dependencies and their required
|
238
255
|
versions. When using projects commands are prefixed with
|
239
|
-
`bundle exec ...`. Bundle will ensure that all
|
256
|
+
`bundle exec ...`. Bundle will ensure that all dependencies are fetched
|
240
257
|
and used.
|
data/Gemfile
CHANGED
@@ -47,7 +47,7 @@ else
|
|
47
47
|
)
|
48
48
|
end
|
49
49
|
|
50
|
-
# Get Rails from source
|
50
|
+
# Get Rails from source because the gem doesn't include tests
|
51
51
|
version = ENV['RAILS_VERSION'] || get_version_from_gemspec
|
52
52
|
gem 'rails', git: "https://github.com/rails/rails.git", tag: "v#{version}"
|
53
53
|
end
|
data/build/Dockerfile
CHANGED
@@ -8,10 +8,7 @@ RUN apt-get --allow-releaseinfo-change update -y && apt-get install -y \
|
|
8
8
|
libxslt-dev \
|
9
9
|
libxml2-dev \
|
10
10
|
libsqlite3-dev \
|
11
|
+
rbenv \
|
11
12
|
&& rm -rf /var/lib/apt/lists/*
|
12
13
|
|
13
|
-
|
14
|
-
RUN gem install bundle rake
|
15
|
-
|
16
|
-
# Add global Gem binaries to the path.
|
17
|
-
ENV PATH /usr/local/lib/ruby/gems/2.4.0::$PATH
|
14
|
+
RUN rm -rf ~/ruby-build; git clone https://github.com/sstephenson/ruby-build.git ~/ruby-build; sh ~/ruby-build/install.sh
|
data/build/local-test.sh
CHANGED
@@ -11,7 +11,6 @@ rm -f "$urlfile"
|
|
11
11
|
# canceled on an agent.
|
12
12
|
rm -rf $HOME/tmp/rails &
|
13
13
|
# Start CockroachDB.
|
14
|
-
cockroach quit --insecure || true
|
15
14
|
cockroach start --insecure --host=localhost --listening-url-file="$urlfile" --store=path=$HOME/tmp/rails &
|
16
15
|
trap "echo 'Exit routine: Killing CockroachDB.' && kill -9 $! &> /dev/null" EXIT
|
17
16
|
for i in {0..3}
|
@@ -31,8 +30,3 @@ echo "Rebuilding database"
|
|
31
30
|
(cd rails/activerecord && bundle exec rake db:cockroachdb:rebuild)
|
32
31
|
echo "Starting tests"
|
33
32
|
(cd rails/activerecord && bundle exec rake test:cockroachdb TESTFILES=$1)
|
34
|
-
|
35
|
-
# Attempt a clean shutdown for good measure. We'll force-kill in the atexit
|
36
|
-
# handler if this fails.
|
37
|
-
cockroach quit --insecure
|
38
|
-
trap - EXIT
|
data/build/teamcity-test.sh
CHANGED
@@ -2,9 +2,17 @@
|
|
2
2
|
|
3
3
|
set -euox pipefail
|
4
4
|
|
5
|
+
eval "$(rbenv init -)"
|
6
|
+
|
7
|
+
rbenv install --skip-existing --verbose
|
8
|
+
|
9
|
+
rbenv rehash
|
10
|
+
|
11
|
+
ruby -v
|
12
|
+
|
5
13
|
# Download CockroachDB
|
6
|
-
VERSION=v22.
|
7
|
-
wget -qO- https://binaries.cockroachdb.com/cockroach-$VERSION.linux-amd64.tgz | tar
|
14
|
+
VERSION=v22.2.6
|
15
|
+
wget -qO- https://binaries.cockroachdb.com/cockroach-$VERSION.linux-amd64.tgz | tar xvz
|
8
16
|
readonly COCKROACH=./cockroach-$VERSION.linux-amd64/cockroach
|
9
17
|
|
10
18
|
# Make sure cockroach can be found on the path. This is required for the
|
@@ -16,9 +24,6 @@ run_cockroach() {
|
|
16
24
|
# Start a CockroachDB server, wait for it to become ready, and arrange
|
17
25
|
# for it to be force-killed when the script exits.
|
18
26
|
rm -f "$urlfile"
|
19
|
-
# Clean out a past CockroachDB instance. This will clean out leftovers
|
20
|
-
# from the build agent, and also between CockroachDB runs.
|
21
|
-
cockroach quit --insecure || true
|
22
27
|
rm -rf cockroach-data
|
23
28
|
# Start CockroachDB.
|
24
29
|
cockroach start-single-node --max-sql-memory=25% --cache=25% --insecure --host=localhost --spatial-libs=./cockroach-$VERSION.linux-amd64/lib --listening-url-file="$urlfile" >/dev/null 2>&1 &
|
@@ -54,8 +59,11 @@ run_cockroach() {
|
|
54
59
|
cockroach sql --insecure -e "SET CLUSTER SETTING sql.defaults.experimental_temporary_tables.enabled = 'true';"
|
55
60
|
}
|
56
61
|
|
62
|
+
gem env
|
63
|
+
|
57
64
|
# Install ruby dependencies.
|
58
|
-
gem install bundler:2.
|
65
|
+
gem install bundler:2.4.9 rake:13.0.6
|
66
|
+
|
59
67
|
bundle install
|
60
68
|
|
61
69
|
run_cockroach
|
@@ -68,11 +76,6 @@ else
|
|
68
76
|
HAS_FAILED=0
|
69
77
|
fi
|
70
78
|
|
71
|
-
# Attempt a clean shutdown for good measure. We'll force-kill in the
|
72
|
-
# exit trap if this script fails.
|
73
|
-
cockroach quit --insecure
|
74
|
-
trap - EXIT
|
75
|
-
|
76
79
|
if [ $HAS_FAILED -eq 1 ]; then
|
77
80
|
exit 1
|
78
81
|
fi
|
data/docker.sh
CHANGED
@@ -10,21 +10,44 @@ module ActiveRecord
|
|
10
10
|
# exceeded.
|
11
11
|
def within_new_transaction(isolation: nil, joinable: true, attempts: 0)
|
12
12
|
super(isolation: isolation, joinable: joinable)
|
13
|
+
rescue ActiveRecord::ConnectionNotEstablished => error
|
14
|
+
raise unless retryable? error
|
15
|
+
raise if attempts >= @connection.max_transaction_retries
|
16
|
+
|
17
|
+
sleep_rand_seconds(attempts)
|
18
|
+
|
19
|
+
unless @connection.active?
|
20
|
+
warn "connection isn't active, reconnecting"
|
21
|
+
@connection.reconnect!
|
22
|
+
end
|
23
|
+
|
24
|
+
within_new_transaction(isolation: isolation, joinable: joinable, attempts: attempts + 1) { yield }
|
13
25
|
rescue ActiveRecord::StatementInvalid => error
|
14
26
|
raise unless retryable? error
|
15
27
|
raise if attempts >= @connection.max_transaction_retries
|
16
28
|
|
17
|
-
attempts
|
18
|
-
|
19
|
-
|
20
|
-
within_new_transaction(isolation: isolation, joinable: joinable, attempts: attempts) { yield }
|
29
|
+
sleep_rand_seconds(attempts)
|
30
|
+
|
31
|
+
within_new_transaction(isolation: isolation, joinable: joinable, attempts: attempts + 1) { yield }
|
21
32
|
end
|
22
33
|
|
23
34
|
def retryable?(error)
|
35
|
+
return true if serialization_error?(error)
|
24
36
|
return true if error.is_a? ActiveRecord::SerializationFailure
|
25
37
|
return retryable? error.cause if error.cause
|
26
38
|
false
|
27
39
|
end
|
40
|
+
|
41
|
+
def serialization_error?(error)
|
42
|
+
errors = [error]
|
43
|
+
errors << error.cause if error.cause
|
44
|
+
errors.any? {|e| e.is_a? PG::TRSerializationFailure }
|
45
|
+
end
|
46
|
+
|
47
|
+
def sleep_rand_seconds(attempts)
|
48
|
+
sleep_seconds = (2 ** attempts + rand) / 10
|
49
|
+
sleep(sleep_seconds)
|
50
|
+
end
|
28
51
|
end
|
29
52
|
end
|
30
53
|
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-cockroachdb-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.
|
4
|
+
version: 7.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cockroach Labs
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -74,8 +74,10 @@ executables: []
|
|
74
74
|
extensions: []
|
75
75
|
extra_rdoc_files: []
|
76
76
|
files:
|
77
|
+
- ".github/workflows/docker.yml"
|
77
78
|
- ".gitignore"
|
78
79
|
- ".gitmodules"
|
80
|
+
- ".ruby-version"
|
79
81
|
- CHANGELOG.md
|
80
82
|
- CONTRIBUTING.md
|
81
83
|
- Gemfile
|
@@ -134,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
136
|
- !ruby/object:Gem::Version
|
135
137
|
version: '0'
|
136
138
|
requirements: []
|
137
|
-
rubygems_version: 3.
|
139
|
+
rubygems_version: 3.4.9
|
138
140
|
signing_key:
|
139
141
|
specification_version: 4
|
140
142
|
summary: CockroachDB adapter for ActiveRecord.
|