20200b844e
Controller now sets (volatile) requestSync flag when a peer sends new height info. This allows much quicker response to new blocks which might hopefully improve synchronization compared with the old periodic sync method. "Unsolicited" network messages are now added to a BlockingQueue, and a separate unsolicited message processing thread (one per peer) deals with this messages in turn. This allows "reply" network messages to propagate up to the threads that are waiting for them, preventing deadlocks and peer disconnections due to lost pings. Controller tries to do as much new transaction processing outside of the blockchain lock as possible, and only broadcasts new transaction's signature if we successfully import transaction to our unconfirmed pile. Synchronizer.findSignaturesFromCommonBlock now returns null to indicate some sort of connection issue (no cool-off) and an empty list to indicate NO COMMON BLOCK. That method also tries to work back to genesis block instead of giving up too early if test block height becomes negative. Network.createConnection additionally filters out candidates if their addresses resolve to the same IP+port as an existing connection. So now it won't connect to localhost:1234 if it has an existing connection with 127.0.0.1:1234. Network.broadcast only considers unique peers, i.e. prefers outbound connection if a peer has corresponding inbound connection. Added Thread.currentThread().setName() where possible. |
||
---|---|---|
lib/org | ||
src | ||
.gitignore | ||
log4j2.properties | ||
pom.xml | ||
README.md |
Qora2
To use:
- Use maven to fetch dependencies.
- Build project.
- Build v1feeder.jar as a fatjar using src/v1feeder.java as the main class
- Fire up an old-gen Qora node.
- Use
v1feeder.jar
to migrate old Qora blocks to DB:
java -jar v1feeder.jar qora-v1-node-ip
You should now be able to run all the JUnit tests.
You can also examine the migrated database using HSQLDB's "sqltool".
It's a good idea to install "rlwrap" (ReadLine wrapper) too as sqltool doesn't support command history/editing!
Typical command line for sqltool would be:
rlwrap java -cp ${HSQLDB_JAR}:${SQLTOOL_JAR} org.hsqldb.cmdline.SqlTool --rcFile=${SQLTOOL_RC} qora
${HSQLDB_JAR}
contains pathname to where Maven downloaded hsqldb,
typically ${HOME}/.m2/repository/org/hsqldb/hsqldb/2.4.0/hsqldb-2.4.0.jar
,
but for now lib/org/hsqldb/hsqldb/r5836/hsqldb-r5836.jar
${SQLTOOL_JAR}
contains pathname to where Maven downloaded sqltool,
typically ${HOME}/.m2/repository/org/hsqldb/sqltool/2.4.1/sqltool-2.4.1.jar
${SQLTOOL_RC}
contains pathname to a text file describing Qora2 database,
e.g. ${HOME}/.sqltool.rc
, with contents like:
urlid qora
url jdbc:hsqldb:file:db/qora
username SA
password
urlid qora-test
url jdbc:hsqldb:file:db/test
username SA
password
You could change the line url jdbc:hsqldb:file:db/test
to use a full pathname for easier use.
Another idea is to assign a shell alias in your .bashrc
like:
export HSQLDB_JAR=${HOME}/.m2/repository/org/hsqldb/hsqldb/2.4.0/hsqldb-2.4.0.jar
export SQLTOOL_JAR=${HOME}/.m2/repository/org/hsqldb/sqltool/2.4.1/sqltool-2.4.1.jar
alias sqltool='rlwrap java -cp ${HSQLDB_JAR}:${SQLTOOL_JAR} org.hsqldb.cmdline.SqlTool --rcFile=${SQLTOOL_RC}'
So you can simply type: sqltool qora-test
Don't forget to use SHUTDOWN;
before exiting sqltool so that database files are closed cleanly.