Yes, we will add of feature deleting old logs soon. BTW, thanks for using Ratis!
Tsz-Wo On Thu, Dec 20, 2018 at 1:50 PM Alan WU <[email protected]> wrote: > > Thank you very much for answering my questions, for the second question, do > you have any plan to add this feature in Ratis? > > Regards, > Alan > > On Tue, Dec 18, 2018 at 10:53 AM Tsz Wo Sze <[email protected]> wrote: > > > Hi Alan, > > > > 1. This is a WAL (Write Ahead Log) question, i.e. how a WAL prevents > > duplication. You need to solve this problem even with a single server > > so that it is not specific to Ratis/Raft. One way is to make the db > > transactions idempotent. Another way to use a pair of begin-end > > transactions. > > > > 2. This is currently a missing feature in Ratis. > > > > Please feel free to send you questions to > > [email protected] (instead of dev). Thanks. > > > > Tsz-Wo > > > > On Thu, Dec 13, 2018 at 7:35 AM Alan WU <[email protected]> wrote: > > > > > > Hello developers, > > > It's nice to meet you, I'm glad to hear that you are building a > > middleware > > > of open source project about Raft protocol, I've forked the code into my > > > code repository, I really appreciate your contribution to the open source > > > community. > > > > > > There are some questions made me confused > > > > > > 1. I created a class and extend to BaseStateMachine, and override the > > > method applyTransaction , below is the method code: > > > > > > @Override > > > public CompletableFuture<Message> applyTransaction(TransactionContext > > trx) { > > > final LogEntryProto entry = trx.getLogEntry(); > > > ByteString data = entry.getSmLogEntry().getData(); > > > final long index = entry.getIndex(); > > > byte[] bytes = data.toByteArray(); > > > String log = new String(bytes,Charset.forName("UTF-8")); > > > System.out.println("applyTransaction::"+index); > > > if(replicationTask.executeTransaction(log)){ > > > updateLastAppliedTermIndex(entry.getTerm(), index); > > > return CompletableFuture.completedFuture(Message.valueOf("ok")); > > > } > > > return CompletableFuture.completedFuture(Message.valueOf("failed")); > > > } > > > > > > My transaction is used to create or update a record into Mysql db, so the > > > entry log can be seen as a SQL bin log, so my question is, how to > > guarantee > > > my database record won't be duplicated when the machine is restarted and > > > then the snapshot replay. > > > > > > 2. how to physically delete the history logs when all machines SQL log is > > > executed successfully. > > > > > > Looking forward to your reply. > > > > > > Best regards, > > > Alan > >
