private DatabaseVersionHeader createDatabaseVersionHeaderFromRow(ResultSet resultSet) throws SQLException { DatabaseVersionHeader databaseVersionHeader = new DatabaseVersionHeader(); databaseVersionHeader.setClient(resultSet.getString("client")); databaseVersionHeader.setDate(new Date(resultSet.getTimestamp("localtime").getTime())); databaseVersionHeader.setVectorClock(getVectorClockByDatabaseVersionId(resultSet.getInt("id"))); return databaseVersionHeader; }
public VectorClock getVectorClock() { return header.getVectorClock(); }
@Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof DatabaseVersion)) { return false; } DatabaseVersion other = (DatabaseVersion) obj; if (header == null) { if (other.header != null) { return false; } } else if (!header.equals(other.header)) { return false; } return true; }
currentDatabaseVersionHeader = new DatabaseVersionHeader(); currentDatabaseVersionHeader.setClient(resultSet.getString("client")); currentDatabaseVersionHeader.setDate(new Date(resultSet.getTimestamp("localtime").getTime())); currentDatabaseVersionHeader.getVectorClock().setClock(resultSet.getString("vc_client"), resultSet.getLong("vc_logicaltime"));
public void writeMuddyMultiChunks(Map<DatabaseVersionHeader, Collection<MultiChunkEntry>> muddyMultiChunksPerDatabaseVersion) throws SQLException { PreparedStatement preparedStatement = getStatement("multichunk_muddy.insert.muddy.writeMuddyMultiChunks.sql"); for (DatabaseVersionHeader muddyDatabaseVersionHeader : muddyMultiChunksPerDatabaseVersion.keySet()) { Collection<MultiChunkEntry> muddyMultiChunks = muddyMultiChunksPerDatabaseVersion.get(muddyDatabaseVersionHeader); for (MultiChunkEntry muddyMultiChunk : muddyMultiChunks) { String multiChunkIdStr = muddyMultiChunk.getId().toString(); String clientName = muddyDatabaseVersionHeader.getClient(); Long clientVersion = muddyDatabaseVersionHeader.getVectorClock().getClock(clientName); preparedStatement.setString(1, multiChunkIdStr); preparedStatement.setString(2, clientName); preparedStatement.setLong(3, clientVersion); preparedStatement.addBatch(); } } preparedStatement.executeBatch(); preparedStatement.close(); }
private long writeDatabaseVersionHeaderInternal(Connection connection, DatabaseVersionHeader databaseVersionHeader) throws SQLException { try (PreparedStatement preparedStatement = connection.prepareStatement( DatabaseConnectionFactory.getStatement("databaseversion.insert.all.writeDatabaseVersion.sql"), Statement.RETURN_GENERATED_KEYS)) { preparedStatement.setString(1, DatabaseVersionStatus.MASTER.toString()); preparedStatement.setTimestamp(2, new Timestamp(databaseVersionHeader.getDate().getTime())); preparedStatement.setString(3, databaseVersionHeader.getClient()); preparedStatement.setString(4, databaseVersionHeader.getVectorClock().toString()); int affectedRows = preparedStatement.executeUpdate(); if (affectedRows == 0) { throw new SQLException("Cannot add database version header. Affected rows is zero."); } try (ResultSet resultSet = preparedStatement.getGeneratedKeys()) { if (resultSet.next()) { return resultSet.getLong(1); } else { throw new SQLException("Cannot get new database version ID"); } } } }
public void setTimestamp(Date timestamp) { header.setDate(timestamp); }
public void setClient(String client) { header.setClient(client); }
public void setVectorClock(VectorClock vectorClock) { header.setVectorClock(vectorClock); }
public DatabaseVersion() { header = new DatabaseVersionHeader(); // Full DB in RAM chunks = new HashMap<ChunkChecksum, ChunkEntry>(); multiChunks = new HashMap<MultiChunkId, MultiChunkEntry>(); fileContents = new HashMap<FileChecksum, FileContent>(); fileHistories = new HashMap<FileHistoryId, PartialFileHistory>(); // Quick access cache chunkMultiChunkCache = new HashMap<ChunkChecksum, MultiChunkId>(); }
public Date getTimestamp() { return header.getDate(); }
public String getClient() { return header.getClient(); }
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((header == null) ? 0 : header.hashCode()); return result; }
logger.log(Level.INFO, "Persisting local SQL database (new database version {0}) ...", databaseVersion.getHeader().toString()); long newDatabaseVersionId = localDatabase.writeDatabaseVersion(databaseVersion);
rangeClientName = currentDatabaseVersionHeader.getClient(); rangeVersionFrom = currentDatabaseVersionHeader.getVectorClock(); rangeVersionTo = currentDatabaseVersionHeader.getVectorClock(); rangeVersionTo = currentDatabaseVersionHeader.getVectorClock();
@Test public void testCompareDatabaseVersionHeaderEqualIgnoreTime() { DatabaseVersionHeaderComparator databaseVersionHeaderComparator = new DatabaseVersionHeaderComparator(false); dbvh2.setDate(new Date(0xFEBEBEBE)); assertThat(databaseVersionHeaderComparator.compare(dbvh1, dbvh2), is(0)); }
@Test public void testCompareDatabaseVersionHeaderDifferentClients() { DatabaseVersionHeaderComparator databaseVersionHeaderComparator = new DatabaseVersionHeaderComparator(true); dbvh2.setClient("B"); assertThat(databaseVersionHeaderComparator.compare(dbvh1, dbvh2), is(-1)); }