-
-
Notifications
You must be signed in to change notification settings - Fork 130
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
rust 2018, and tower-grcp start for placement driver
- Loading branch information
Showing
12 changed files
with
448 additions
and
77 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
extern crate tower_grpc_build; | ||
|
||
fn main() { | ||
tower_grpc_build::Config::new() | ||
.enable_server(true) | ||
.enable_client(true) | ||
.build(&["proto/placement.proto"], &["proto/"]) | ||
.unwrap_or_else(|e| panic!("Compilation failed :( {}", e)); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
syntax = "proto3"; | ||
|
||
option java_multiple_files = true; | ||
option java_package = "io.toshi.placement"; | ||
option java_outer_classname = "ToshiPlacement"; | ||
|
||
package placement; | ||
|
||
service Placement { | ||
rpc getPlacement (PlacementRequest) returns (PlacementReply) { | ||
} | ||
} | ||
|
||
enum IndexKind { | ||
SHARD = 0; | ||
REPLICA = 1; | ||
} | ||
|
||
message PlacementRequest { | ||
string index = 1; | ||
IndexKind kind = 2; | ||
} | ||
|
||
message PlacementReply { | ||
string host = 1; | ||
IndexKind kind = 2; | ||
} |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
use clap::{crate_authors, crate_description, crate_version, App, AppSettings, Arg, ArgMatches}; | ||
use log::info; | ||
|
||
use toshi::cluster::Place; | ||
use toshi::settings::HEADER; | ||
|
||
fn main() { | ||
let settings = settings(); | ||
let host = settings.value_of("host").unwrap(); | ||
let port = settings.value_of("port").unwrap(); | ||
std::env::set_var("RUST_LOG", settings.value_of("level").unwrap()); | ||
pretty_env_logger::init(); | ||
|
||
println!("{}", HEADER); | ||
info!("Starting Toshi Placement Service..."); | ||
let addr = format!("{}:{}", host, port).parse().unwrap(); | ||
let service = Place::get_service(addr); | ||
|
||
tokio::run(service); | ||
} | ||
|
||
fn settings<'a>() -> ArgMatches<'a> { | ||
App::new("Toshi Placement Driver") | ||
.version(crate_version!()) | ||
.about(crate_description!()) | ||
.author(crate_authors!()) | ||
.arg( | ||
Arg::with_name("host") | ||
.short("h") | ||
.long("host") | ||
.takes_value(true) | ||
.default_value("127.0.0.1"), | ||
).arg( | ||
Arg::with_name("port") | ||
.short("p") | ||
.long("port") | ||
.takes_value(true) | ||
.default_value("8081"), | ||
).arg( | ||
Arg::with_name("level") | ||
.short("l") | ||
.long("level") | ||
.takes_value(true) | ||
.default_value("info"), | ||
).arg( | ||
Arg::with_name("consul-host") | ||
.short("C") | ||
.long("consul-host") | ||
.takes_value(true) | ||
.default_value("localhost"), | ||
).arg( | ||
Arg::with_name("consul-port") | ||
.short("P") | ||
.long("consul-port") | ||
.takes_value(true) | ||
.default_value("8500"), | ||
).get_matches() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
use std::net::SocketAddr; | ||
|
||
use futures::{future, Future, Stream}; | ||
use log::{error, info}; | ||
|
||
use tokio::executor::DefaultExecutor; | ||
use tokio::net::TcpListener; | ||
|
||
use tower_grpc::{Error, Request, Response}; | ||
use tower_h2::Server; | ||
|
||
use super::placement::{server, IndexKind, PlacementReply, PlacementRequest}; | ||
|
||
#[derive(Clone, Debug)] | ||
pub struct Place; | ||
|
||
impl server::Placement for Place { | ||
type GetPlacementFuture = future::FutureResult<Response<PlacementReply>, Error>; | ||
|
||
fn get_placement(&mut self, request: Request<PlacementRequest>) -> Self::GetPlacementFuture { | ||
info!("Request = {:?}", request); | ||
let response = Response::new(PlacementReply { | ||
host: "localhost:90189271876281".into(), | ||
kind: IndexKind::Shard.into(), | ||
}); | ||
|
||
future::ok(response) | ||
} | ||
} | ||
|
||
impl Place { | ||
pub fn get_service(addr: SocketAddr) -> impl Future<Item = (), Error = ()> { | ||
let service = server::PlacementServer::new(Place); | ||
let executor = DefaultExecutor::current(); | ||
let mut h2 = Server::new(service, Default::default(), executor); | ||
|
||
info!("Binding on port: {:?}", addr); | ||
let bind = TcpListener::bind(&addr).expect(&format!("Failed to bind to host: {:?}", addr)); | ||
|
||
info!("Bound to: {:?}", &bind.local_addr().unwrap()); | ||
bind.incoming() | ||
.for_each(move |sock| { | ||
let req = h2.serve(sock).map_err(|err| error!("h2 error: {:?}", err)); | ||
tokio::spawn(req); | ||
Ok(()) | ||
}).map_err(|err| error!("Server Error: {:?}", err)) | ||
} | ||
} | ||
|
||
#[cfg(test)] | ||
mod tests { | ||
use super::*; | ||
use tokio::net::TcpStream; | ||
use tower_h2::client::Connect; | ||
|
||
pub struct Conn(SocketAddr); | ||
|
||
#[test] | ||
fn client_test() { | ||
let addr: SocketAddr = "127.0.0.1:8081".parse().unwrap(); | ||
let mut server = Place::get_service(addr.clone()); | ||
|
||
let req = PlacementRequest { | ||
index: "test".into(), | ||
kind: IndexKind::Shard.into(), | ||
}; | ||
let tcp_stream = Box::new(TcpStream::connect(&addr).and_then(|tcp| tcp.set_nodelay(true).map(move |_| tcp))); | ||
|
||
let mut c = Connect::new(tcp_stream, Default::default(), DefaultExecutor::current()); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters