Merge pull request #17464 from cransom/cassandra

Cassandra

authored by

Frederik Rietdijk and committed by
GitHub
8955dc5e c99e8b94

+576 -193
+1
nixos/modules/module-list.nix
··· 137 137 ./services/continuous-integration/jenkins/slave.nix 138 138 ./services/databases/4store-endpoint.nix 139 139 ./services/databases/4store.nix 140 + ./services/databases/cassandra.nix 140 141 ./services/databases/couchdb.nix 141 142 ./services/databases/firebird.nix 142 143 ./services/databases/hbase.nix
+445
nixos/modules/services/databases/cassandra.nix
··· 1 + { config, lib, pkgs, ... }: 2 + 3 + with lib; 4 + 5 + let 6 + cfg = config.services.cassandra; 7 + cassandraPackage = cfg.package.override { 8 + jre = cfg.jre; 9 + }; 10 + cassandraUser = { 11 + name = cfg.user; 12 + home = "/var/lib/cassandra"; 13 + description = "Cassandra role user"; 14 + }; 15 + 16 + cassandraRackDcProperties = '' 17 + dc=${cfg.dc} 18 + rack=${cfg.rack} 19 + ''; 20 + 21 + cassandraConf = '' 22 + cluster_name: ${cfg.clusterName} 23 + num_tokens: 256 24 + auto_bootstrap: ${if cfg.autoBootstrap then "true" else "false"} 25 + hinted_handoff_enabled: ${if cfg.hintedHandOff then "true" else "false"} 26 + hinted_handoff_throttle_in_kb: ${builtins.toString cfg.hintedHandOffThrottle} 27 + max_hints_delivery_threads: 2 28 + max_hint_window_in_ms: 10800000 # 3 hours 29 + authenticator: ${cfg.authenticator} 30 + authorizer: ${cfg.authorizer} 31 + permissions_validity_in_ms: 2000 32 + partitioner: org.apache.cassandra.dht.Murmur3Partitioner 33 + data_file_directories: 34 + ${builtins.concatStringsSep "\n" (map (v: " - "+v) cfg.dataDirs)} 35 + commitlog_directory: ${cfg.commitLogDirectory} 36 + disk_failure_policy: stop 37 + key_cache_size_in_mb: 38 + key_cache_save_period: 14400 39 + row_cache_size_in_mb: 0 40 + row_cache_save_period: 0 41 + saved_caches_directory: ${cfg.savedCachesDirectory} 42 + commitlog_sync: ${cfg.commitLogSync} 43 + commitlog_sync_period_in_ms: ${builtins.toString cfg.commitLogSyncPeriod} 44 + commitlog_segment_size_in_mb: 32 45 + seed_provider: 46 + - class_name: org.apache.cassandra.locator.SimpleSeedProvider 47 + parameters: 48 + - seeds: "${builtins.concatStringsSep "," cfg.seeds}" 49 + concurrent_reads: ${builtins.toString cfg.concurrentReads} 50 + concurrent_writes: ${builtins.toString cfg.concurrentWrites} 51 + memtable_flush_queue_size: 4 52 + trickle_fsync: false 53 + trickle_fsync_interval_in_kb: 10240 54 + storage_port: 7000 55 + ssl_storage_port: 7001 56 + listen_address: ${cfg.listenAddress} 57 + start_native_transport: true 58 + native_transport_port: 9042 59 + start_rpc: true 60 + rpc_address: ${cfg.rpcAddress} 61 + rpc_port: 9160 62 + rpc_keepalive: true 63 + rpc_server_type: sync 64 + thrift_framed_transport_size_in_mb: 15 65 + incremental_backups: ${if cfg.incrementalBackups then "true" else "false"} 66 + snapshot_before_compaction: false 67 + auto_snapshot: true 68 + column_index_size_in_kb: 64 69 + in_memory_compaction_limit_in_mb: 64 70 + multithreaded_compaction: false 71 + compaction_throughput_mb_per_sec: 16 72 + compaction_preheat_key_cache: true 73 + read_request_timeout_in_ms: 10000 74 + range_request_timeout_in_ms: 10000 75 + write_request_timeout_in_ms: 10000 76 + cas_contention_timeout_in_ms: 1000 77 + truncate_request_timeout_in_ms: 60000 78 + request_timeout_in_ms: 10000 79 + cross_node_timeout: false 80 + endpoint_snitch: ${cfg.snitch} 81 + dynamic_snitch_update_interval_in_ms: 100 82 + dynamic_snitch_reset_interval_in_ms: 600000 83 + dynamic_snitch_badness_threshold: 0.1 84 + request_scheduler: org.apache.cassandra.scheduler.NoScheduler 85 + server_encryption_options: 86 + internode_encryption: ${cfg.internodeEncryption} 87 + keystore: ${cfg.keyStorePath} 88 + keystore_password: ${cfg.keyStorePassword} 89 + truststore: ${cfg.trustStorePath} 90 + truststore_password: ${cfg.trustStorePassword} 91 + client_encryption_options: 92 + enabled: ${if cfg.clientEncryption then "true" else "false"} 93 + keystore: ${cfg.keyStorePath} 94 + keystore_password: ${cfg.keyStorePassword} 95 + internode_compression: all 96 + inter_dc_tcp_nodelay: false 97 + preheat_kernel_page_cache: false 98 + streaming_socket_timeout_in_ms: ${toString cfg.streamingSocketTimoutInMS} 99 + ''; 100 + 101 + cassandraLog = '' 102 + log4j.rootLogger=${cfg.logLevel},stdout 103 + log4j.appender.stdout=org.apache.log4j.ConsoleAppender 104 + log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 105 + log4j.appender.stdout.layout.ConversionPattern=%5p [%t] %d{HH:mm:ss,SSS} %m%n 106 + ''; 107 + 108 + cassandraConfFile = pkgs.writeText "cassandra.yaml" cassandraConf; 109 + cassandraLogFile = pkgs.writeText "log4j-server.properties" cassandraLog; 110 + cassandraRackFile = pkgs.writeText "cassandra-rackdc.properties" cassandraRackDcProperties; 111 + 112 + cassandraEnvironment = { 113 + CASSANDRA_HOME = cassandraPackage; 114 + JAVA_HOME = cfg.jre; 115 + CASSANDRA_CONF = "/etc/cassandra"; 116 + }; 117 + 118 + in { 119 + 120 + ###### interface 121 + 122 + options.services.cassandra = { 123 + enable = mkOption { 124 + description = "Whether to enable cassandra."; 125 + default = false; 126 + type = types.bool; 127 + }; 128 + package = mkOption { 129 + description = "Cassandra package to use."; 130 + default = pkgs.cassandra; 131 + type = types.package; 132 + }; 133 + jre = mkOption { 134 + description = "JRE package to run cassandra service."; 135 + default = pkgs.jre; 136 + type = types.package; 137 + }; 138 + user = mkOption { 139 + description = "User that runs cassandra service."; 140 + default = "cassandra"; 141 + type = types.string; 142 + }; 143 + group = mkOption { 144 + description = "Group that runs cassandra service."; 145 + default = "cassandra"; 146 + type = types.string; 147 + }; 148 + envFile = mkOption { 149 + description = "path to cassandra-env.sh"; 150 + default = "${cassandraPackage}/conf/cassandra-env.sh"; 151 + type = types.path; 152 + }; 153 + clusterName = mkOption { 154 + description = "set cluster name"; 155 + default = "cassandra"; 156 + example = "prod-cluster0"; 157 + type = types.string; 158 + }; 159 + commitLogDirectory = mkOption { 160 + description = "directory for commit logs"; 161 + default = "/var/lib/cassandra/commit_log"; 162 + type = types.string; 163 + }; 164 + savedCachesDirectory = mkOption { 165 + description = "directory for saved caches"; 166 + default = "/var/lib/cassandra/saved_caches"; 167 + type = types.string; 168 + }; 169 + hintedHandOff = mkOption { 170 + description = "enable hinted handoff"; 171 + default = true; 172 + type = types.bool; 173 + }; 174 + hintedHandOffThrottle = mkOption { 175 + description = "hinted hand off throttle rate in kb"; 176 + default = 1024; 177 + type = types.int; 178 + }; 179 + commitLogSync = mkOption { 180 + description = "commitlog sync method"; 181 + default = "periodic"; 182 + type = types.str; 183 + example = "batch"; 184 + }; 185 + commitLogSyncPeriod = mkOption { 186 + description = "commitlog sync period in ms "; 187 + default = 10000; 188 + type = types.int; 189 + }; 190 + envScript = mkOption { 191 + default = "${cassandraPackage}/conf/cassandra-env.sh"; 192 + type = types.path; 193 + description = "Supply your own cassandra-env.sh rather than using the default"; 194 + }; 195 + extraParams = mkOption { 196 + description = "add additional lines to cassandra-env.sh"; 197 + default = []; 198 + example = [''JVM_OPTS="$JVM_OPTS -Dcassandra.available_processors=1"'']; 199 + type = types.listOf types.str; 200 + }; 201 + dataDirs = mkOption { 202 + type = types.listOf types.path; 203 + default = [ "/var/lib/cassandra/data" ]; 204 + description = "Data directories for cassandra"; 205 + }; 206 + logLevel = mkOption { 207 + type = types.str; 208 + default = "INFO"; 209 + description = "default logging level for log4j"; 210 + }; 211 + internodeEncryption = mkOption { 212 + description = "enable internode encryption"; 213 + default = "none"; 214 + example = "all"; 215 + type = types.str; 216 + }; 217 + clientEncryption = mkOption { 218 + description = "enable client encryption"; 219 + default = false; 220 + type = types.bool; 221 + }; 222 + trustStorePath = mkOption { 223 + description = "path to truststore"; 224 + default = ".conf/truststore"; 225 + type = types.str; 226 + }; 227 + keyStorePath = mkOption { 228 + description = "path to keystore"; 229 + default = ".conf/keystore"; 230 + type = types.str; 231 + }; 232 + keyStorePassword = mkOption { 233 + description = "password to keystore"; 234 + default = "cassandra"; 235 + type = types.str; 236 + }; 237 + trustStorePassword = mkOption { 238 + description = "password to truststore"; 239 + default = "cassandra"; 240 + type = types.str; 241 + }; 242 + seeds = mkOption { 243 + description = "password to truststore"; 244 + default = [ "127.0.0.1" ]; 245 + type = types.listOf types.str; 246 + }; 247 + concurrentWrites = mkOption { 248 + description = "number of concurrent writes allowed"; 249 + default = 32; 250 + type = types.int; 251 + }; 252 + concurrentReads = mkOption { 253 + description = "number of concurrent reads allowed"; 254 + default = 32; 255 + type = types.int; 256 + }; 257 + listenAddress = mkOption { 258 + description = "listen address"; 259 + default = "localhost"; 260 + type = types.str; 261 + }; 262 + rpcAddress = mkOption { 263 + description = "rpc listener address"; 264 + default = "localhost"; 265 + type = types.str; 266 + }; 267 + incrementalBackups = mkOption { 268 + description = "enable incremental backups"; 269 + default = false; 270 + type = types.bool; 271 + }; 272 + snitch = mkOption { 273 + description = "snitch to use for topology discovery"; 274 + default = "GossipingPropertyFileSnitch"; 275 + example = "Ec2Snitch"; 276 + type = types.str; 277 + }; 278 + dc = mkOption { 279 + description = "datacenter for use in topology configuration"; 280 + default = "DC1"; 281 + example = "DC1"; 282 + type = types.str; 283 + }; 284 + rack = mkOption { 285 + description = "rack for use in topology configuration"; 286 + default = "RAC1"; 287 + example = "RAC1"; 288 + type = types.str; 289 + }; 290 + authorizer = mkOption { 291 + description = " 292 + Authorization backend, implementing IAuthorizer; used to limit access/provide permissions 293 + "; 294 + default = "AllowAllAuthorizer"; 295 + example = "CassandraAuthorizer"; 296 + type = types.str; 297 + }; 298 + authenticator = mkOption { 299 + description = " 300 + Authentication backend, implementing IAuthenticator; used to identify users 301 + "; 302 + default = "AllowAllAuthenticator"; 303 + example = "PasswordAuthenticator"; 304 + type = types.str; 305 + }; 306 + autoBootstrap = mkOption { 307 + description = "It makes new (non-seed) nodes automatically migrate the right data to themselves."; 308 + default = true; 309 + example = true; 310 + type = types.bool; 311 + }; 312 + streamingSocketTimoutInMS = mkOption { 313 + description = "Enable or disable socket timeout for streaming operations"; 314 + default = 3600000; #CASSANDRA-8611 315 + example = 120; 316 + type = types.int; 317 + }; 318 + repairStartAt = mkOption { 319 + default = "Sun"; 320 + type = types.string; 321 + description = '' 322 + Defines realtime (i.e. wallclock) timers with calendar event 323 + expressions. For more details re: systemd OnCalendar at 324 + https://www.freedesktop.org/software/systemd/man/systemd.time.html#Displaying%20Time%20Spans 325 + ''; 326 + example = ["weekly" "daily" "08:05:40" "mon,fri *-1/2-1,3 *:30:45"]; 327 + }; 328 + repairRandomizedDelayInSec = mkOption { 329 + default = 0; 330 + type = types.int; 331 + description = ''Delay the timer by a randomly selected, evenly distributed 332 + amount of time between 0 and the specified time value. re: systemd timer 333 + RandomizedDelaySec for more details 334 + ''; 335 + }; 336 + repairPostStop = mkOption { 337 + default = null; 338 + type = types.nullOr types.string; 339 + description = '' 340 + Run a script when repair is over. One can use it to send statsd events, email, etc. 341 + ''; 342 + }; 343 + repairPostStart = mkOption { 344 + default = null; 345 + type = types.nullOr types.string; 346 + description = '' 347 + Run a script when repair starts. One can use it to send statsd events, email, etc. 348 + It has same semantics as systemd ExecStopPost; So, if it fails, unit is consisdered 349 + failed. 350 + ''; 351 + }; 352 + }; 353 + 354 + ###### implementation 355 + 356 + config = mkIf cfg.enable { 357 + 358 + environment.etc."cassandra/cassandra-rackdc.properties" = { 359 + source = cassandraRackFile; 360 + }; 361 + environment.etc."cassandra/cassandra.yaml" = { 362 + source = cassandraConfFile; 363 + }; 364 + environment.etc."cassandra/log4j-server.properties" = { 365 + source = cassandraLogFile; 366 + }; 367 + environment.etc."cassandra/cassandra-env.sh" = { 368 + text = '' 369 + ${builtins.readFile cfg.envFile} 370 + ${concatStringsSep "\n" cfg.extraParams} 371 + ''; 372 + }; 373 + systemd.services.cassandra = { 374 + description = "Cassandra Daemon"; 375 + wantedBy = [ "multi-user.target" ]; 376 + after = [ "network-interfaces.target" ]; 377 + environment = cassandraEnvironment; 378 + restartTriggers = [ cassandraConfFile cassandraLogFile cassandraRackFile ]; 379 + serviceConfig = { 380 + 381 + User = cfg.user; 382 + PermissionsStartOnly = true; 383 + LimitAS = "infinity"; 384 + LimitNOFILE = "100000"; 385 + LimitNPROC = "32768"; 386 + LimitMEMLOCK = "infinity"; 387 + 388 + }; 389 + script = '' 390 + ${cassandraPackage}/bin/cassandra -f 391 + ''; 392 + path = [ 393 + cfg.jre 394 + cassandraPackage 395 + pkgs.coreutils 396 + ]; 397 + preStart = '' 398 + mkdir -m 0700 -p /etc/cassandra/triggers 399 + mkdir -m 0700 -p /var/lib/cassandra /var/log/cassandra 400 + chown ${cfg.user} /var/lib/cassandra /var/log/cassandra /etc/cassandra/triggers 401 + ''; 402 + postStart = '' 403 + sleep 2 404 + while ! nodetool status >/dev/null 2>&1; do 405 + sleep 2 406 + done 407 + nodetool status 408 + ''; 409 + }; 410 + 411 + environment.systemPackages = [ cassandraPackage ]; 412 + 413 + networking.firewall.allowedTCPPorts = [ 414 + 7000 415 + 7001 416 + 9042 417 + 9160 418 + ]; 419 + 420 + users.extraUsers.cassandra = 421 + if config.ids.uids ? "cassandra" 422 + then { uid = config.ids.uids.cassandra; } // cassandraUser 423 + else cassandraUser ; 424 + 425 + boot.kernel.sysctl."vm.swappiness" = pkgs.lib.mkOptionDefault 0; 426 + 427 + systemd.timers."cassandra-repair" = { 428 + timerConfig = { 429 + OnCalendar = "${toString cfg.repairStartAt}"; 430 + RandomizedDelaySec = cfg.repairRandomizedDelayInSec; 431 + }; 432 + }; 433 + 434 + systemd.services."cassandra-repair" = { 435 + description = "Cassandra repair daemon"; 436 + environment = cassandraEnvironment; 437 + script = "${cassandraPackage}/bin/nodetool repair -pr"; 438 + postStop = mkIf (cfg.repairPostStop != null) cfg.repairPostStop; 439 + postStart = mkIf (cfg.repairPostStart != null) cfg.repairPostStart; 440 + serviceConfig = { 441 + User = cfg.user; 442 + }; 443 + }; 444 + }; 445 + }
+1
nixos/release.nix
··· 211 211 tests.boot = callSubTests tests/boot.nix {}; 212 212 tests.boot-stage1 = callTest tests/boot-stage1.nix {}; 213 213 tests.cadvisor = hydraJob (import tests/cadvisor.nix { system = "x86_64-linux"; }); 214 + tests.cassandra = callTest tests/cassandra.nix {}; 214 215 tests.chromium = (callSubTests tests/chromium.nix { system = "x86_64-linux"; }).stable; 215 216 tests.cjdns = callTest tests/cjdns.nix {}; 216 217 tests.containers-ipv4 = callTest tests/containers-ipv4.nix {};
+68
nixos/tests/cassandra.nix
··· 1 + import ./make-test.nix ({ pkgs, ...}: 2 + let 3 + user = "cassandra"; 4 + nodeCfg = nodes: selfIP: cassandraOpts: 5 + { 6 + services.cassandra = { 7 + enable = true; 8 + listenAddress = selfIP; 9 + rpcAddress = "0.0.0.0"; 10 + seeds = [ "192.168.1.1" ]; 11 + package = pkgs.cassandra_2_0; 12 + jre = pkgs.openjdk; 13 + clusterName = "ci ahoy"; 14 + authenticator = "PasswordAuthenticator"; 15 + authorizer = "CassandraAuthorizer"; 16 + user = user; 17 + } // cassandraOpts; 18 + nixpkgs.config.allowUnfree = true; 19 + virtualisation.memorySize = 1024; 20 + }; 21 + 22 + in 23 + { 24 + name = "cassandra-ci"; 25 + 26 + nodes = { 27 + cass0 = {pkgs, config, nodes, ...}: nodeCfg nodes "192.168.1.1" {}; 28 + cass1 = {pkgs, config, nodes, ...}: nodeCfg nodes "192.168.1.2" {}; 29 + cass2 = {pkgs, config, nodes, ...}: nodeCfg nodes "192.168.1.3" { 30 + extraParams = [ 31 + ''JVM_OPTS="$JVM_OPTS -Dcassandra.replace_address=192.168.1.2"'' 32 + ]; 33 + listenAddress = "192.168.1.3"; 34 + }; 35 + }; 36 + 37 + testScript = '' 38 + subtest "start seed", sub { 39 + $cass0->waitForUnit("cassandra.service"); 40 + $cass0->waitForOpenPort(9160); 41 + $cass0->execute("echo show version | cqlsh localhost -u cassandra -p cassandra"); 42 + sleep 2; 43 + $cass0->succeed("echo show version | cqlsh localhost -u cassandra -p cassandra"); 44 + $cass1->start; 45 + }; 46 + subtest "cassandra user/group", sub { 47 + $cass0->succeed("id \"${user}\" >/dev/null"); 48 + $cass1->succeed("id \"${user}\" >/dev/null"); 49 + }; 50 + subtest "bring up cassandra cluster", sub { 51 + $cass1->waitForUnit("cassandra.service"); 52 + $cass0->waitUntilSucceeds("nodetool status | grep -c UN | grep 2"); 53 + }; 54 + subtest "break and fix node", sub { 55 + $cass0->block; 56 + $cass0->waitUntilSucceeds("nodetool status | grep -c DN | grep 1"); 57 + $cass0->unblock; 58 + $cass0->waitUntilSucceeds("nodetool status | grep -c UN | grep 2"); 59 + }; 60 + subtest "replace crashed node", sub { 61 + $cass1->crash; 62 + $cass2->start; 63 + $cass2->waitForUnit("cassandra.service"); 64 + $cass0->waitUntilFails("nodetool status | grep UN | grep 192.168.1.2"); 65 + $cass0->waitUntilSucceeds("nodetool status | grep UN | grep 192.168.1.3"); 66 + }; 67 + ''; 68 + })
+3 -49
pkgs/servers/nosql/cassandra/1.2.nix
··· 1 - { stdenv 2 - , fetchurl 3 - , jre 4 - , python 5 - , makeWrapper 6 - , gawk 7 - , bash 8 - , getopt 9 - , procps 10 - }: 11 - 12 - let 1 + { callPackage, ... } @ args: 13 2 3 + callPackage ./generic.nix (args // { 14 4 version = "1.2.19"; 15 5 sha256 = "0zkq3ggpk8ra2siar43vmrn6lmvn902p1g2lrgb46ak1vii6w30w"; 16 - 17 - in 18 - 19 - stdenv.mkDerivation rec { 20 - name = "cassandra-${version}"; 21 - 22 - src = fetchurl { 23 - inherit sha256; 24 - url = "mirror://apache/cassandra/${version}/apache-${name}-bin.tar.gz"; 25 - }; 26 - 27 - nativeBuildInputs = [ makeWrapper ]; 28 - 29 - installPhase = '' 30 - mkdir $out 31 - mv * $out 32 - 33 - for cmd in cassandra nodetool sstablekeys sstableloader sstableupgrade 34 - do wrapProgram $out/bin/$cmd \ 35 - --set JAVA_HOME ${jre} \ 36 - --prefix PATH : ${bash}/bin \ 37 - --prefix PATH : ${getopt}/bin \ 38 - --prefix PATH : ${gawk}/bin \ 39 - --prefix PATH : ${procps}/bin 40 - done 41 - 42 - wrapProgram $out/bin/cqlsh --prefix PATH : ${python}/bin 43 - ''; 44 - 45 - meta = with stdenv.lib; { 46 - homepage = http://cassandra.apache.org/; 47 - description = "A massively scalable open source NoSQL database"; 48 - platforms = platforms.all; 49 - license = licenses.asl20; 50 - maintainers = with maintainers; [ bcarrell ]; 51 - }; 52 - } 6 + })
+3 -49
pkgs/servers/nosql/cassandra/2.0.nix
··· 1 - { stdenv 2 - , fetchurl 3 - , jre 4 - , python 5 - , makeWrapper 6 - , gawk 7 - , bash 8 - , getopt 9 - , procps 10 - }: 11 - 12 - let 1 + { callPackage, ... } @ args: 13 2 3 + callPackage ./generic.nix (args // { 14 4 version = "2.0.16"; 15 5 sha256 = "1fpvgmakmxy1lnygccpc32q53pa36bwy0lqdvb6hsifkxymdw8y5"; 16 - 17 - in 18 - 19 - stdenv.mkDerivation rec { 20 - name = "cassandra-${version}"; 21 - 22 - src = fetchurl { 23 - inherit sha256; 24 - url = "mirror://apache/cassandra/${version}/apache-${name}-bin.tar.gz"; 25 - }; 26 - 27 - nativeBuildInputs = [ makeWrapper ]; 28 - 29 - installPhase = '' 30 - mkdir $out 31 - mv * $out 32 - 33 - for cmd in cassandra nodetool sstablekeys sstableloader sstableupgrade 34 - do wrapProgram $out/bin/$cmd \ 35 - --set JAVA_HOME ${jre} \ 36 - --prefix PATH : ${bash}/bin \ 37 - --prefix PATH : ${getopt}/bin \ 38 - --prefix PATH : ${gawk}/bin \ 39 - --prefix PATH : ${procps}/bin 40 - done 41 - 42 - wrapProgram $out/bin/cqlsh --prefix PATH : ${python}/bin 43 - ''; 44 - 45 - meta = with stdenv.lib; { 46 - homepage = http://cassandra.apache.org/; 47 - description = "A massively scalable open source NoSQL database"; 48 - platforms = platforms.all; 49 - license = licenses.asl20; 50 - maintainers = with maintainers; [ nckx rushmorem ]; 51 - }; 52 - } 6 + })
+3 -49
pkgs/servers/nosql/cassandra/2.1.nix
··· 1 - { stdenv 2 - , fetchurl 3 - , jre 4 - , python 5 - , makeWrapper 6 - , gawk 7 - , bash 8 - , getopt 9 - , procps 10 - }: 11 - 12 - let 1 + { callPackage, ... } @ args: 13 2 3 + callPackage ./generic.nix (args // { 14 4 version = "2.1.15"; 15 5 sha256 = "1yc6r4gmxz9c4zghzn6bz5wswz7dz61w7p4x9s5gqnixfp2mlapp"; 16 - 17 - in 18 - 19 - stdenv.mkDerivation rec { 20 - name = "cassandra-${version}"; 21 - 22 - src = fetchurl { 23 - inherit sha256; 24 - url = "mirror://apache/cassandra/${version}/apache-${name}-bin.tar.gz"; 25 - }; 26 - 27 - nativeBuildInputs = [ makeWrapper ]; 28 - 29 - installPhase = '' 30 - mkdir $out 31 - mv * $out 32 - 33 - for cmd in cassandra nodetool sstablekeys sstableloader sstableupgrade 34 - do wrapProgram $out/bin/$cmd \ 35 - --set JAVA_HOME ${jre} \ 36 - --prefix PATH : ${bash}/bin \ 37 - --prefix PATH : ${getopt}/bin \ 38 - --prefix PATH : ${gawk}/bin \ 39 - --prefix PATH : ${procps}/bin 40 - done 41 - 42 - wrapProgram $out/bin/cqlsh --prefix PATH : ${python}/bin 43 - ''; 44 - 45 - meta = with stdenv.lib; { 46 - homepage = http://cassandra.apache.org/; 47 - description = "A massively scalable open source NoSQL database"; 48 - platforms = platforms.all; 49 - license = licenses.asl20; 50 - maintainers = with maintainers; [ nckx rushmorem ]; 51 - }; 52 - } 6 + })
+3 -46
pkgs/servers/nosql/cassandra/3.0.nix
··· 1 - { stdenv 2 - , fetchurl 3 - , jre 4 - , python 5 - , makeWrapper 6 - , gawk 7 - , bash 8 - , getopt 9 - , procps 10 - }: 1 + { callPackage, ... } @ args: 11 2 12 - let 13 - 3 + callPackage ./generic.nix (args // { 14 4 version = "3.0.8"; 15 5 sha256 = "02chk8q3pbl0y6rijfk2gbd0p1ani8daypsx9m9ingqkdx8ajljq"; 16 - 17 - in 18 - 19 - stdenv.mkDerivation rec { 20 - name = "cassandra-${version}"; 21 - 22 - src = fetchurl { 23 - inherit sha256; 24 - url = "mirror://apache/cassandra/${version}/apache-${name}-bin.tar.gz"; 25 - }; 26 - 27 - nativeBuildInputs = [ makeWrapper ]; 28 - 29 - installPhase = '' 30 - mkdir $out 31 - mv * $out 32 - 33 - for cmd in cassandra nodetool sstableloader sstableupgrade 34 - do wrapProgram $out/bin/$cmd \ 35 - --set JAVA_HOME ${jre} \ 36 - --prefix PATH : ${stdenv.lib.makeBinPath [ bash getopt gawk procps ]} 37 - done 38 - 39 - wrapProgram $out/bin/cqlsh --prefix PATH : ${python}/bin 40 - ''; 41 - 42 - meta = with stdenv.lib; { 43 - homepage = http://cassandra.apache.org/; 44 - description = "A massively scalable open source NoSQL database"; 45 - platforms = platforms.all; 46 - license = licenses.asl20; 47 - maintainers = with maintainers; [ nckx rushmorem ]; 48 - }; 49 - } 6 + })
+49
pkgs/servers/nosql/cassandra/generic.nix
··· 1 + { stdenv, fetchurl, python, makeWrapper, gawk, bash, getopt, procps 2 + , which, jre, version, sha256, ... 3 + }: 4 + 5 + let 6 + libPath = stdenv.lib.makeLibraryPath [ stdenv.cc.cc ]; 7 + binPath = stdenv.lib.makeBinPath [ bash getopt gawk procps which jre ]; 8 + in 9 + 10 + stdenv.mkDerivation rec { 11 + name = "cassandra-${version}"; 12 + 13 + src = fetchurl { 14 + inherit sha256; 15 + url = "mirror://apache/cassandra/${version}/apache-${name}-bin.tar.gz"; 16 + }; 17 + 18 + nativeBuildInputs = [ makeWrapper ]; 19 + 20 + installPhase = '' 21 + mkdir $out 22 + mv * $out 23 + for cmd in bin/cassandra bin/nodetool bin/sstablekeys \ 24 + bin/sstableloader bin/sstableupgrade \ 25 + tools/bin/cassandra-stress tools/bin/cassandra-stressd \ 26 + tools/bin/sstablemetadata tools/bin/sstableofflinerelevel \ 27 + tools/bin/token-generator tools/bin/sstablelevelreset; do 28 + 29 + # check if file exists because some bin tools don't exist across all 30 + # cassandra versions 31 + if [ -f $out/$cmd ]; then 32 + wrapProgram $out/$cmd \ 33 + --suffix-each LD_LIBRARY_PATH : ${libPath} \ 34 + --prefix PATH : ${binPath} \ 35 + --set JAVA_HOME ${jre} 36 + fi 37 + done 38 + 39 + wrapProgram $out/bin/cqlsh --prefix PATH : ${python}/bin 40 + ''; 41 + 42 + meta = with stdenv.lib; { 43 + homepage = http://cassandra.apache.org/; 44 + description = "A massively scalable open source NoSQL database"; 45 + platforms = platforms.linux; 46 + license = licenses.asl20; 47 + maintainers = with maintainers; [ nckx rushmorem cransom ]; 48 + }; 49 + }