Commit Graph

8705 Commits

Author SHA1 Message Date
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
Asias He
37f52d632f streaming: Remove unused progress() function 2016-02-26 17:38:37 +08:00
Asias He
8060b97d67 streaming: Log number of bytes sent and recevied when stream_plan completes
It is useful for test code to verify number of bytes sent/received.

It looks like below in the log.

/tmp/out1:INFO  [shard 0] stream_session - \
[Stream #1f3e23f0-db9e-11e5-9cfb-000000000000] bytes_sent = 0, bytes_received = 15760704

/tmp/out2:INFO  [shard 0] stream_session - \
[Stream #1f3e23f0-db9e-11e5-9cfb-000000000000] bytes_sent = 0, bytes_received = 18203964

/tmp/out3:INFO  [shard 0] stream_session - \
[Stream #1f3e23f0-db9e-11e5-9cfb-000000000000] bytes_sent = 33964668, bytes_received = 0
2016-02-26 17:38:37 +08:00
Asias He
9dede89e07 streaming: Add get_progress_on_all_shards for plan_id
Get stream_bytes for a specific plan_id.
2016-02-26 17:38:37 +08:00
Tomasz Grabiec
97558b2cfe idl-compiler: Put serializers inside template class specializations
The problem is that a generic functions (eg. skip()) which call
deserialize() overloads based on their template parameter only see
deserilize() overloads which were declared at the time skip() was
declared and not those which are available at the time of
instantiation. This forces all serializers to be declared before
serialization_visitors.hh is first included. Serializers included
later will fail to compile. This becomes problematic to ensure when
serializers are included from headers.

Template class specialization lookup doesn't suffer from this
limitation. We can use that to solve the problem. The IDL compiler
will now generate template class specializations with read/write
static methods. In addition to that, default serializer() and
deserialize() implementations are delegating to serializer<>
specialization so that API and existing code doesn't have to change.

Message-Id: <1456423066-6979-1-git-send-email-tgrabiec@scylladb.com>
2016-02-25 20:00:49 +02:00
Takuya ASADA
aa3f6ad462 dist: add scyllatop on .rpm/.deb
Fixes #933

Signed-off-by: Takuya ASADA <syuu@scylladb.com>
Message-Id: <1456420768-15921-1-git-send-email-syuu@scylladb.com>
2016-02-25 19:24:11 +02:00
Avi Kivity
a74f68eeb2 Merge "Properly tag readers" from Glauber
"Gleb has recently noted that our query reads are not even being registered
with the I/O queue.

Investigating what is happening, I found out that while the priority that
make_reader receives was not being properly passed downwards to the SSTable
reader. The reader code is also used by compaction class, and that one is fine.
But the CQL reads are not.

On top of that, there are also some other places where the tag was not properly
propagated, and those are patched."
2016-02-25 18:35:58 +02:00
Raphael S. Carvalho
fc4cbcde72 Revert "Revert "database: Fix use and assumptions about pending compations""
This reverts commit a4d92750eb.

Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>
Message-Id: <8a405e7c1daf94c4d70d8084f59ce7205d56fe52.1456415398.git.raphaelsc@scylladb.com>
2016-02-25 18:02:01 +02:00
Raphael S. Carvalho
7f0371129c tests: sstable_test: submit compaction request through column family
That's needed for reverted commit 9586793c to work. It's also the
correct thing to do, i.e. column family submits itself to manager.

Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>
Message-Id: <2a1d141ad929c1957933f57412083dd52af0390b.1456415398.git.raphaelsc@scylladb.com>
2016-02-25 18:02:00 +02:00
Avi Kivity
c269527f42 Merge "Get rid of assert in gossip and storage_service" from Asias
"Make the error handling more robust."
2016-02-25 17:38:21 +02:00