static LogReplica create(File directory, String fileName) { return new LogReplica(new File(fileName), NativeLibrary.tryOpenDirectory(directory.getPath())); }
void maybeCreateReplica(File directory, String fileName, Set<LogRecord> records) { if (replicasByFile.containsKey(directory)) return; @SuppressWarnings("resource") // LogReplicas are closed in LogReplicaSet::close final LogReplica replica = LogReplica.create(directory, fileName); records.forEach(replica::append); replicasByFile.put(directory, replica); if (logger.isTraceEnabled()) logger.trace("Created new file replica {}", replica); }
void append(LogRecord record) { boolean existed = exists(); FileUtils.appendAndSync(file, record.toString()); // If the file did not exist before appending the first // line, then sync the directory as well since now it must exist if (!existed) syncDirectory(); }
entry.getKey().getFileName(), currentLine, firstLine); entry.getKey().setError(currentLine, String.format("Does not match <%s> in first replica file", firstLine)); return false; entry.getKey().getFileName(), currentLine, firstLine); entry.getKey().getFileName(), currentLine, firstLine); entry.getKey().setError(currentLine, String.format("Does not match <%s> in first replica file", firstLine)); return false;
void addReplica(File file) { File directory = file.getParentFile(); assert !replicasByFile.containsKey(directory); replicasByFile.put(directory, LogReplica.open(file)); if (logger.isTraceEnabled()) logger.trace("Added log file replica {} ", file); }
void printContentsWithAnyErrors(StringBuilder str) { str.append(file.getPath()); str.append(System.lineSeparator()); FileUtils.readLines(file).forEach(line -> printLineWithAnyError(str, line)); }
void delete() { LogTransaction.delete(file); syncDirectory(); }
void setErrorInReplicas(LogRecord record) { replicas().forEach(r -> r.setError(record.raw, record.error())); }
void printContentsWithAnyErrors(StringBuilder str) { replicas().forEach(r -> r.printContentsWithAnyErrors(str)); }
/** * Add the record to all the replicas: if it is a final record then we throw only if we fail to write it * to all, otherwise we throw if we fail to write it to any file, see CASSANDRA-10421 for details */ void append(LogRecord record) { Throwable err = Throwables.perform(null, replicas().stream().map(r -> () -> r.append(record))); if (err != null) { if (!record.isFinal() || err.getSuppressed().length == replicas().size() -1) Throwables.maybeFail(err); logger.error("Failed to add record '{}' to some replicas '{}'", record, this); } }
entry.getKey().getFileName(), currentLine, firstLine); entry.getKey().setError(currentLine, String.format("Does not match <%s> in first replica file", firstLine)); return false; entry.getKey().getFileName(), currentLine, firstLine); entry.getKey().getFileName(), currentLine, firstLine); entry.getKey().setError(currentLine, String.format("Does not match <%s> in first replica file", firstLine)); return false;
void addReplica(File file) { File directory = file.getParentFile(); assert !replicasByFile.containsKey(directory); replicasByFile.put(directory, LogReplica.open(file)); if (logger.isTraceEnabled()) logger.trace("Added log file replica {} ", file); }
void printContentsWithAnyErrors(StringBuilder str) { str.append(file.getPath()); str.append(System.lineSeparator()); FileUtils.readLines(file).forEach(line -> printLineWithAnyError(str, line)); }
void delete() { LogTransaction.delete(file); syncDirectory(); }
void setErrorInReplicas(LogRecord record) { replicas().forEach(r -> r.setError(record.raw, record.error())); }
void printContentsWithAnyErrors(StringBuilder str) { replicas().forEach(r -> r.printContentsWithAnyErrors(str)); }
/** * Add the record to all the replicas: if it is a final record then we throw only if we fail to write it * to all, otherwise we throw if we fail to write it to any file, see CASSANDRA-10421 for details */ void append(LogRecord record) { Throwable err = Throwables.perform(null, replicas().stream().map(r -> () -> r.append(record))); if (err != null) { if (!record.isFinal() || err.getSuppressed().length == replicas().size() -1) Throwables.maybeFail(err); logger.error("Failed to add record '{}' to some replicas '{}'", record, this); } }
void append(LogRecord record) { boolean existed = exists(); FileUtils.appendAndSync(file, record.toString()); // If the file did not exist before appending the first // line, then sync the directory as well since now it must exist if (!existed) syncDirectory(); }
entry.getKey().getFileName(), currentLine, firstLine); entry.getKey().setError(currentLine, String.format("Does not match <%s> in first replica file", firstLine)); return false; entry.getKey().getFileName(), currentLine, firstLine); entry.getKey().getFileName(), currentLine, firstLine); entry.getKey().setError(currentLine, String.format("Does not match <%s> in first replica file", firstLine)); return false;
static LogReplica open(File file) { return new LogReplica(file, NativeLibrary.tryOpenDirectory(file.getParentFile().getPath())); }