Skip to content
This repository has been archived by the owner on Jan 22, 2025. It is now read-only.

plug in new ledger, from #813 #830

Merged
merged 3 commits into from
Aug 3, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
Cargo.lock
/target/

**/*.rs.bk
.cargo

Expand All @@ -11,5 +12,5 @@ Cargo.lock
/config-client/
/multinode-demo/test/config-client/

# Generated log files
/log-*.txt
# test temp files, ledgers, etc.
/farf/
2 changes: 1 addition & 1 deletion multinode-demo/leader.sh
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ tune_networking
trap 'kill "$pid" && wait "$pid"' INT TERM
$program \
--identity "$SOLANA_CONFIG_DIR"/leader.json \
--ledger "$SOLANA_CONFIG_DIR"/ledger.log \
--ledger "$SOLANA_CONFIG_DIR"/ledger \
> >($leader_logger) 2>&1 &
pid=$!
wait "$pid"
4 changes: 2 additions & 2 deletions multinode-demo/setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,8 @@ if $node_type_leader; then
echo "Creating $mint_path with $num_tokens tokens"
$solana_keygen -o "$mint_path"

echo "Creating $SOLANA_CONFIG_DIR/ledger.log"
$solana_genesis --tokens="$num_tokens" < "$mint_path" > "$SOLANA_CONFIG_DIR"/ledger.log
echo "Creating $SOLANA_CONFIG_DIR/ledger"
$solana_genesis --tokens="$num_tokens" --ledger "$SOLANA_CONFIG_DIR"/ledger < "$mint_path"

echo "Creating $SOLANA_CONFIG_DIR/leader.json"
$solana_fullnode_config --keypair="$leader_id_path" "${leader_address_args[@]}" > "$SOLANA_CONFIG_DIR"/leader.json
Expand Down
6 changes: 3 additions & 3 deletions multinode-demo/validator.sh
Original file line number Diff line number Diff line change
Expand Up @@ -71,16 +71,16 @@ SOLANA_LEADER_CONFIG_DIR="$SOLANA_CONFIG_DIR"/leader-config
rm -rf "$SOLANA_LEADER_CONFIG_DIR"
set -ex
$rsync -vPrz --max-size=100M "$rsync_leader_url"/config/ "$SOLANA_LEADER_CONFIG_DIR"
[[ -r "$SOLANA_LEADER_CONFIG_DIR"/ledger.log ]] || {
echo "Unable to retrieve ledger.log from $rsync_leader_url"
[[ -d "$SOLANA_LEADER_CONFIG_DIR"/ledger ]] || {
echo "Unable to retrieve ledger from $rsync_leader_url"
exit 1
}

trap 'kill "$pid" && wait "$pid"' INT TERM
$program \
--identity "$SOLANA_CONFIG_DIR"/validator.json \
--testnet "$leader_address:$leader_port" \
--ledger "$SOLANA_LEADER_CONFIG_DIR"/ledger.log \
--ledger "$SOLANA_LEADER_CONFIG_DIR"/ledger \
> >($validator_logger) 2>&1 &
pid=$!
wait "$pid"
19 changes: 8 additions & 11 deletions src/bin/fullnode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use clap::{App, Arg};
use solana::client::mk_client;
use solana::crdt::{NodeInfo, TestNode};
use solana::drone::DRONE_PORT;
use solana::fullnode::{Config, FullNode, LedgerFile};
use solana::fullnode::{Config, FullNode};
use solana::logger;
use solana::metrics::set_panic_hook;
use solana::service::Service;
Expand Down Expand Up @@ -41,11 +41,12 @@ fn main() -> () {
)
.arg(
Arg::with_name("ledger")
.short("L")
.short("l")
.long("ledger")
.value_name("FILE")
.value_name("DIR")
.takes_value(true)
.help("use FILE as persistent ledger (defaults to stdin/stdout)"),
.required(true)
.help("use DIR as persistent ledger location"),
)
.get_matches();

Expand All @@ -72,11 +73,7 @@ fn main() -> () {
let leader_pubkey = keypair.pubkey();
let repl_clone = repl_data.clone();

let ledger = if let Some(l) = matches.value_of("ledger") {
LedgerFile::Path(l.to_string())
} else {
LedgerFile::StdInOut
};
let ledger_path = matches.value_of("ledger").unwrap();

let mut node = TestNode::new_with_bind_addr(repl_data, bind_addr);
let mut drone_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), DRONE_PORT);
Expand All @@ -85,11 +82,11 @@ fn main() -> () {
let testnet_addr: SocketAddr = testnet_address_string.parse().unwrap();
drone_addr.set_ip(testnet_addr.ip());

FullNode::new(node, false, ledger, keypair, Some(testnet_addr))
FullNode::new(node, false, ledger_path, keypair, Some(testnet_addr))
} else {
node.data.leader_id = node.data.id;

FullNode::new(node, true, ledger, keypair, None)
FullNode::new(node, true, ledger_path, keypair, None)
};

let mut client = mk_client(&repl_clone);
Expand Down
19 changes: 15 additions & 4 deletions src/bin/genesis.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ extern crate solana;

use atty::{is, Stream};
use clap::{App, Arg};
use solana::entry_writer::EntryWriter;
use solana::ledger::LedgerWriter;
use solana::mint::Mint;
use std::error;
use std::io::{stdin, stdout, Read};
use std::io::{stdin, Read};
use std::process::exit;

fn main() -> Result<(), Box<error::Error>> {
Expand All @@ -25,9 +25,19 @@ fn main() -> Result<(), Box<error::Error>> {
.required(true)
.help("Number of tokens with which to initialize mint"),
)
.arg(
Arg::with_name("ledger")
.short("l")
.long("ledger")
.value_name("DIR")
.takes_value(true)
.required(true)
.help("use DIR as persistent ledger location"),
)
.get_matches();

let tokens = value_t_or_exit!(matches, "tokens", i64);
let ledger_path = matches.value_of("ledger").unwrap();

if is(Stream::Stdin) {
eprintln!("nothing found on stdin, expected a json file");
Expand All @@ -44,7 +54,8 @@ fn main() -> Result<(), Box<error::Error>> {
let pkcs8: Vec<u8> = serde_json::from_str(&buffer)?;
let mint = Mint::new_with_pkcs8(tokens, pkcs8);

let mut writer = stdout();
EntryWriter::write_entries(&mut writer, mint.create_entries())?;
let mut ledger_writer = LedgerWriter::new(&ledger_path)?;
ledger_writer.write_entries(mint.create_entries())?;

Ok(())
}
12 changes: 10 additions & 2 deletions src/drone.rs
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ mod tests {
use mint::Mint;
use service::Service;
use signature::{KeyPair, KeyPairUtil};
use std::io::sink;
use std::fs::remove_dir_all;
use std::net::{SocketAddr, UdpSocket};
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
Expand Down Expand Up @@ -259,6 +259,12 @@ mod tests {
assert_eq!(drone.request_cap, REQUEST_CAP);
}

fn tmp_ledger_path(name: &str) -> String {
let keypair = KeyPair::new();

format!("farf/{}-{}", name, keypair.pubkey())
}

#[test]
#[ignore]
fn test_send_airdrop() {
Expand All @@ -275,6 +281,7 @@ mod tests {
let carlos_pubkey = KeyPair::new().pubkey();
let exit = Arc::new(AtomicBool::new(false));
let leader_data = leader.data.clone();
let ledger_path = tmp_ledger_path("send_airdrop");

let server = FullNode::new_leader(
leader_keypair,
Expand All @@ -284,7 +291,7 @@ mod tests {
Some(Duration::from_millis(30)),
leader,
exit.clone(),
sink(),
&ledger_path,
false,
);
//TODO: this seems unstable
Expand Down Expand Up @@ -336,5 +343,6 @@ mod tests {

exit.store(true, Ordering::Relaxed);
server.join().unwrap();
remove_dir_all(ledger_path).unwrap();
}
}
Loading