Commit Graph

8714 Commits

Author SHA1 Message Date
Pekka Enberg
3a6d43c784 cql3: Fix duplicate column definition check
We cannot use shared_ptr *instances* for checking duplicate column
definitions because they are never equal. Store column definition name
in the unordered_map instead.

Fixes cql_additional_tests.py:TestCQL.identifier_test.

Spotted by Shlomi.

Message-Id: <1456840506-13941-1-git-send-email-penberg@scylladb.com>
2016-03-01 16:46:33 +02:00
Asias He
50bf65db8d streaming: Fix keep alive timer progress checking
When the first time the keep alive timer fires, the _last_stream_bytes
btyes will be zero since it is the first time we update it. The keep
alive timer will be rearmed and fired again. The second time, we find
there is no progress, we close the session. The total idle time will be
2 * keep alive timer.

To make the idle time to close the session be more precise, we reduce
the interval to check the progess and close the session by checking last
time the progress is made.

Message-Id: <c959cffce0cc738a3d73caaf71d2adb709d46863.1456831616.git.asias@scylladb.com>
2016-03-01 16:46:08 +02:00
Paweł Dziepak
92f9c9428e cql3: don't insert row marker if schema is_cql3_table()
Checking schema::is_dense() is not enough to know whether row marker
should be inserted or not as there may be compact storage tables that
are not considered dense (namely, a table with now clustering key).

Row marker should only be insterted if schema::is_cql3_table() is true.

Fixes #931.

Signed-off-by: Paweł Dziepak <pdziepak@scylladb.com>
Message-Id: <1456834937-1630-1-git-send-email-pdziepak@scylladb.com>
2016-03-01 13:29:53 +01:00
Paweł Dziepak
6a6c12f8c4 tests/commitlog: use unaligned_cast instead of reinterpret_cast
corrupt_segment() is meant to write some garbage at arbitrary position
in the commitlog segment. That position is not necessairly properly
aligned for uint32_t.

Silences ubsan complaints about unaligned write.

Signed-off-by: Paweł Dziepak <pdziepak@scylladb.com>
Message-Id: <1456827726-21288-1-git-send-email-pdziepak@scylladb.com>
2016-03-01 12:57:06 +02:00
Takuya ASADA
fd7eb7d1e5 dist: add support scylla_io_setup for Ubuntu
Unlike CentOS/Fedora, scylla_io_setup is calling from pre-start section of scylla-server upstart job, not from separated job.
This is because Upstart does not provide same behavior as After / Requires directives on systemd.

Fixes #954.

Signed-off-by: Takuya ASADA <syuu@scylladb.com>
Message-Id: <1456825805-4195-1-git-send-email-syuu@scylladb.com>
2016-03-01 12:56:44 +02:00
Avi Kivity
e295b9b4e4 Merge 2016-03-01 09:52:04 +02:00
Amnon Heiman
1c7bc28d35 idl-compiler: change optional vector implementation
This patch change the way optional vector are implemented.

Now a vector of optional would be handle like any other non primitive
types, with a single method add() that would return a writer to the
optional.

The writer to the optional would have a skip and write method like
simple optional field.

For basic types the write method would get the value as a parameter, for
composite type, it would return a writer to the type.

Signed-off-by: Amnon Heiman <amnon@scylladb.com>
Message-Id: <1456796143-3366-2-git-send-email-amnon@scylladb.com>
2016-03-01 09:41:30 +02:00
Raphael S. Carvalho
34ed930aa4 sstables: fix lack of accuracy in disk usage report
To report disk usage, scylla was only taking into account size of
sstable data component. Other components such as index and filter
may be relatively big too. Therefore, 'nodetool status' would
report an innacurate disk usage. That can be fixed by taking into
account size of all sstable components.

Fixes #943.

Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>
Message-Id: <08453585223570006ac4d25fe5fb909ad6c140a5.1456762244.git.raphaelsc@scylladb.com>
2016-03-01 08:58:42 +02:00
Paweł Dziepak
e194835d8a tests/idl: add test for stdx::optional<> serialization
Signed-off-by: Paweł Dziepak <pdziepak@scylladb.com>
Message-Id: <1456761055-23916-1-git-send-email-pdziepak@scylladb.com>
2016-02-29 18:12:59 +02:00
Paweł Dziepak
dec63eac6e commitlog: add commitlog entry move constructor
Default move constructor and assignment didn't handle reference to
mutation (_mutation) properly.

Fixes #935.

Signed-off-by: Paweł Dziepak <pdziepak@scylladb.com>
Message-Id: <1456760905-23478-1-git-send-email-pdziepak@scylladb.com>
2016-02-29 18:10:15 +02:00
Calle Wilund
0de8f6d24f cql_test_env: Shutdown auth on test stop
Ensures no spurious timer tasks tries to touch stopped distributed
objects.

Message-Id: <1456753987-6914-4-git-send-email-calle@scylladb.com>
2016-02-29 16:06:33 +02:00
Calle Wilund
fafcb8cc1e storage_service: Explicitly shutdown "auth" on system drain
I.e. cancels auth object setup tasks if not already run.

Message-Id: <1456753987-6914-3-git-send-email-calle@scylladb.com>
2016-02-29 16:06:30 +02:00
Calle Wilund
2ba738b555 auth: make scheduled tasks explicity cancellable
Adds a shutdown method. In this, explicitly cancels all waiting tasks
(all two!).

Message-Id: <1456753987-6914-2-git-send-email-calle@scylladb.com>
2016-02-29 16:06:25 +02:00
Calle Wilund
dc136a6a1c commitlog: Fix reserve counter overflow
Fixes #482

See code comment. Reserve segment allocation count sum can temporarily
overflow due to continuation delay/reordering, if we manage to reach the
on_timer code before finally clauses from previous reserve allocation
invocation has processed. However, since these are benign overflows
(just indicating even more that we don't need to do anything right now)
simply capping the count should be fine.
Avoids assert in boost irange.

Message-Id: <1456740679-4537-1-git-send-email-calle@scylladb.com>
2016-02-29 14:56:24 +02:00
Avi Kivity
5cc1b39cc9 Merge "Store gossip generation in system table" from Asias
"Kill one FIXME."
2016-02-29 14:53:06 +02:00
Avi Kivity
0bababedc3 Merge "Fix scylla-io-setup.service" from Takuya
"This patchset fixes #950, run scylla-io-setup before scylla-server on anycase, and installs example /etc/scylla.d/io.conf by default to prevent error on 'EnvironmentFile=/etc/scylla.d/*.conf'."
2016-02-29 14:14:42 +02:00
Takuya ASADA
6e55ed96d6 dist: add user-defined prefix for AMI name
With this change, you can define your own prefix of AMI name in variable.json.

example:
{
	"access_key": "xxx",
	"secret_key": "xxx",
	"subnet_id": "xxx",
	"security_group_id": "xxx",
	"region": "us-east-1",
	"associate_public_ip_address": "true",
	"instance_type": "c4.xlarge",
	"ami_prefix": "takuya-"
}

Signed-off-by: Takuya ASADA <syuu@scylladb.com>
Message-Id: <1456329247-5109-1-git-send-email-syuu@scylladb.com>
2016-02-29 13:49:11 +02:00
Takuya ASADA
48d72c01d1 dist: don't run iotune on developer mode 2016-02-29 20:13:46 +09:00
Takuya ASADA
e8a107de43 dist: install example io.conf by default
Prevent error on 'EnvironmentFile=/etc/scylla.d/*.conf'.
Parameters are commented out, and the file will replace when scylla starts, by scylla-io-setup.service.
2016-02-29 20:12:54 +09:00
Avi Kivity
69fdbf6a6e Merge "Use IDL for query results" from Tomek
"The series includes Amnon's unmerged support for optional<> in idl-compiler.

Depends on seastar patch "[PATCH seastar] simple_input_stream: Introduce begin()".

The query result footprint for cassandra-stress mutation as reported
by tests/memory-footprint increased by 18% from 285 B to 337 B.

perf_simple_query shows slight regression in throughput (-8%):

  build/release/tests/perf/perf_simple_query -c4 -m1G --partitions 100000

Before: ~433k tps
After:  ~400k tps"
2016-02-29 12:52:44 +02:00
Takuya ASADA
a281b10210 dist: run scylla-io-setup.service before scylla-server.service on anycase
We needed "systemctl enable scylla-io-setup.service; systemctl start scylla-server.service" to launch scylla-io-setup.service before scylla-server.service.

Signed-off-by: Takuya ASADA <syuu@scylladb.com>
2016-02-29 18:59:10 +09:00
Takuya ASADA
11a616d4d6 dist: add scyllaio-setup.service for %systemd_post and %systemd_preun on .rpm
This is needed for initialize the service correctly

Signed-off-by: Takuya ASADA <syuu@scylladb.com>
2016-02-29 18:59:10 +09:00
Pekka Enberg
3919878a32 service/storage_service: Use logger for CQL listening report
Message-Id: <1456739417-11909-1-git-send-email-penberg@scylladb.com>
2016-02-29 11:52:06 +02:00
Avi Kivity
a1ff21f6ea main: sanity check cpu support
We require SSE 4.2 (for commitlog CRC32), verify it exists early and bail
out if it does not.

We need to check early, because the compiler may use newer instructions
in the generated code; the earlier we check, the lower the probability
we hit an undefined opcode exception.

Message-Id: <1456665401-18252-1-git-send-email-avi@scylladb.com>
2016-02-29 11:41:54 +02:00
Asias He
cc1e1a567c storage_service: Make replace-node error msg more friendly
Before:

ERROR [shard 0] storage_service - Format of host-id =
marshal_exception (marshalling error) is incorrect ???
Exiting on unhandled exception of type 'marshal_exception': marshalling error

After:

ERROR [shard 0] storage_service - Unable to parse 127.0.0.3 as host-id
Exiting on unhandled exception of type 'std::runtime_error': Unable to
parse 127.0.0.3 as host-id

Message-Id: <1456737987-32353-1-git-send-email-asias@scylladb.com>
2016-02-29 11:40:13 +02:00
Asias He
e36a99ef23 storage_service: Do not take api lock for get_load_map
It is used by

nodetool status

If an api operation inside storage_service takes a long time to finish
, which holds the lock, it will block nodetool status for a long time.

I think it is safe to get the load map even if other operations are in-flight.

Refs: #850

Message-Id: <1456737987-32353-2-git-send-email-asias@scylladb.com>
2016-02-29 11:39:09 +02:00
Takuya ASADA
84447fd7b0 dist: permission error fixed on scylla_io_setup
Can't be scylla user since we are writing to /etc

Signed-off-by: Takuya ASADA <syuu@scylladb.com>
Message-Id: <1456330209-5828-1-git-send-email-syuu@scylladb.com>
2016-02-29 11:35:38 +02:00
Asias He
1061bf0854 storage_service: Use increment_and_get_generation to get generation
The gossip generation is now stored in system.local table.

Before:
cqlsh> SELECT gossip_generation from system.local;

 gossip_generation
-------------------
              null

(1 rows)

After:
cqlsh> SELECT gossip_generation from system.local;

 gossip_generation
-------------------
        1456733559

(1 rows)
2016-02-29 16:31:42 +08:00
Asias He
abafec99a5 system_keyspace: Implement increment_and_get_generation 2016-02-29 16:31:42 +08:00
Gleb Natapov
22d2b9a2dc Yield execution in mutation_result_merger
mutation_result_merger::get can run for a long time. Make it yield
execution from time to time.

Message-Id: <1456674046-14502-1-git-send-email-gleb@scylladb.com>
2016-02-28 17:55:33 +02:00
Avi Kivity
182e6eb89b Merge seastar upstream
* seastar fbb4b01...9964cbf (4):
  > Allow map_reduce reducer to return future
  > Workaround for gcc 4.9 optional bug
  > add convert() to future<> futurizer specification
  > tests: fix rpc_test build
2016-02-28 17:55:03 +02:00
Gleb Natapov
32e9f1ecd4 Fix read_timeouts storage_proxy counter
Read timeouts are not counted now. The patch fixes it.

Message-Id: <20160228133315.GN6705@scylladb.com>
2016-02-28 15:34:42 +02:00
Avi Kivity
31b42a2574 Merge seastar upstream
* seastar 769cb8b...fbb4b01 (5):
  > simple_input_stream: Introduce begin()
  > tests: add rpc unit testing
  > tests: add loopback sockets
  > packet: introduce release() and release_into()
  > temporary_buffer: add make_copy() named constructor
2016-02-28 15:32:38 +02:00
Yoav Kleinberger
651aa06c32 tools/scyllatop: fix mistake in help message
Signed-off-by: Yoav Kleinberger <yoav@scylladb.com>
Message-Id: <ae5f11d7df954dc7561db94cda2d73bd8233f1e5.1456510513.git.yoav@scylladb.com>
2016-02-28 12:42:12 +02:00
Avi Kivity
ed365c2779 Merge "Fix row_cache::update()" from Tomasz
"Fixes recent regression in row_cache_test.cc:test_update_failure"
2016-02-28 11:17:32 +02:00
Pekka Enberg
81bc5dab77 Merge "streaming progress info fix" from Asias
"This series:

1) Log total bytes sent/recevied when a stream plan completes.
It is useful in test code.

2) Fix http://scylla_ip:10000/stream_manager API"
2016-02-27 16:13:04 +02:00
Tomasz Grabiec
3997421b2c row_cache: Let the cleanup guard do invalidation of unmerged partitions 2016-02-26 16:57:31 +01:00
Tomasz Grabiec
aa15268249 row_cache: Delete the entry even if invalidation failed
Otherwise we will leak it, and region destructor will fail:

row_cache_test: utils/logalloc.cc:1211: virtual logalloc::region_impl::~region_impl(): Assertion `seg->is_empty()' failed.

Fixes regression in row_cache_test.
2016-02-26 16:57:31 +01:00
Tomasz Grabiec
be24816c8a row_cache: Clear partitions with region locked
Since invalidate() may allocate, we need to take the region lock to
keep m.partitions references valid around whole clear_and_dispose(),
which relies on that.
2016-02-26 16:57:31 +01:00
Tomasz Grabiec
6cec131432 query: Switch to IDL-generated views and writers
The query result footprint for cassandra-stress mutation as reported
by tests/memory-footprint increased by 18% from 285 B to 337 B.

perf_simple_query shows slight regression in throughput (-8%):

  build/release/tests/perf/perf_simple_query -c4 -m1G --partitions 100000

Before: ~433k tps
After:  ~400k tps
2016-02-26 12:26:13 +01:00
Tomasz Grabiec
ee8509cf36 idl-compiler: Introduce add(*_view) on vector 2016-02-26 12:26:13 +01:00
Tomasz Grabiec
1ecf9a7427 query: result_view: Introduce do_with()
Encapsulates linearization. Abstracts away the fact that result_view
can't work with discontiguous storage yet.
2016-02-26 12:26:13 +01:00
Tomasz Grabiec
135c1fa306 tests: memory_footprint: Report size in query results 2016-02-26 12:26:13 +01:00
Tomasz Grabiec
6c89e3d2ea serializer: Fix wrong size_type being serialized into the placeholder 2016-02-26 12:26:13 +01:00
Tomasz Grabiec
4ab0ca07f1 idl-compiler: Catch un-closed frame errors sooner
By initilizing them to 0 we can catch unclosed frames at
deserialization time. It's better than leaving frame size undefined,
which may cause errors much later in deserialization process and thus
would make it harder to identifiy the real cause.
2016-02-26 12:26:13 +01:00
Tomasz Grabiec
697d9bfa56 serializer: Introduce as_input_stream(bytes_view) 2016-02-26 12:26:13 +01:00
Tomasz Grabiec
85fb4eba32 Add missing includes 2016-02-26 12:26:13 +01:00
Tomasz Grabiec
4284715ddf Relax includes 2016-02-26 12:26:13 +01:00
Amnon Heiman
9ea3ffe527 idl-compiler: Add optional support
This patch adds optional writer support an optional field can be either
skip or set.

For vector of optional, a write_empty method will
add 1 to the vector count and mark the optional as false.

Signed-off-by: Amnon Heiman <amnon@scylladb.com>
2016-02-26 12:25:08 +01:00
Asias He
fd5f3cff47 streaming: Fix stream_manager progress api
For each stream_session, we pretend we are sending/receiving one file,
to make it compatible with nodetool. For receiving_files, the file name
is "rxnofile". For sending_files, the file name is "txnofile".

stream_manager::update_all_progress_info is introduced to update the
progress info of all the stream_sessions in the node. We need this
because streaming mutations are received on all the cores, but the
stream_session object is only on one of the cores. It adds overhead if
we update progress info in stream_session object whenever we receive a
streaming mutation. So, what we do now is when we really need the
progress info, we update the progress info in stream_session object.

With http://127.0.0.$i:10000/stream_manager/, it looks like below when
decommission node 3 in a 3 nodes cluster.

=========== GET NODE 1
[{"plan_id": "935a2cc0-dc6b-11e5-bdbf-000000000000", "description":
"Unbootstrap", "sessions": [{"receiving_files": [{"value": {"direction":
"IN", "file_name": "rxnofile", "session_index": 0, "total_bytes":
16876296, "peer": "127.0.0.3", "current_bytes": 16876296}, "key":
"rxnofile"}], "receiving_summaries": [{"files": 1, "total_size": 0,
"cf_id": "869d8630-dc6b-11e5-bdbf-000000000000"}], "session_index": 0,
"state": "PREPARING", "connecting": "127.0.0.3", "peer": "127.0.0.3"}]}]

=========== GET NODE 2

[{"plan_id": "935a2cc0-dc6b-11e5-bdbf-000000000000", "description":
"Unbootstrap", "sessions": [{"receiving_files": [{"value": {"direction":
"IN", "file_name": "rxnofile", "session_index": 0, "total_bytes":
16755552, "peer": "127.0.0.3", "current_bytes": 16755552}, "key":
"rxnofile"}], "receiving_summaries": [{"files": 1, "total_size": 0,
"cf_id": "869d8630-dc6b-11e5-bdbf-000000000000"}], "session_index": 0,
"state": "PREPARING", "connecting": "127.0.0.3", "peer": "127.0.0.3"}]}]

=========== GET NODE 3
[{"plan_id": "935a2cc0-dc6b-11e5-bdbf-000000000000", "description":
"Unbootstrap", "sessions": [{"sending_files": [{"value": {"direction":
"OUT", "file_name": "txnofile", "session_index": 0, "total_bytes":
16876296, "peer": "127.0.0.1", "current_bytes": 16876296}, "key":
"txnofile"}], "sending_summaries": [{"files": 1, "total_size": 0,
"cf_id": "869d8630-dc6b-11e5-bdbf-000000000000"}], "session_index": 0,
"state": "PREPARING", "connecting": "127.0.0.1", "peer":
"127.0.0.1"},{"sending_files": [{"value": {"direction": "OUT",
"file_name": "txnofile", "session_index": 0, "total_bytes": 16755552,
"peer": "127.0.0.2", "current_bytes": 16755552}, "key": "txnofile"}],
"sending_summaries": [{"files": 1, "total_size": 0, "cf_id":
"869d8630-dc6b-11e5-bdbf-000000000000"}], "session_index": 0, "state":
"PREPARING", "connecting": "127.0.0.2", "peer": "127.0.0.2"}]}]
2016-02-26 17:38:37 +08:00